带参数和innerHTML的事件监听器只能工作一次

发布于 2024-12-29 02:56:39 字数 735 浏览 2 评论 0原文

我有一个脚本可以向页面添加一些文本,如下所示:

document.body.innerHTML += '<input type="image" id="alertMeID" style="position:fixed;top:0;left:0" //src="http://i55.tinypic.com/2nly5wz.gif" ///>';
document.body.innerHTML += '<input type="image" id="alertMeID2" style="position:fixed;top:100;left:100" //src="http://i55.tinypic.com/2nly5wz.gif" />';
document.getElementById('alertMeID').addEventListener('click', function(){do_this("some text")}, false);
document.getElementById('alertMeID2').addEventListener('click', function(){do_this("another text")}, false);

function do_this(sendingParameter){document.body.innerHTML += sendingParameter;}

第一次单击其中一个图像时,它可以正常工作。但是,如果我点击第二次,它就根本不起作用。

如何解决这个问题呢?

I have a script that adds some text to page, like so:

document.body.innerHTML += '<input type="image" id="alertMeID" style="position:fixed;top:0;left:0" //src="http://i55.tinypic.com/2nly5wz.gif" ///>';
document.body.innerHTML += '<input type="image" id="alertMeID2" style="position:fixed;top:100;left:100" //src="http://i55.tinypic.com/2nly5wz.gif" />';
document.getElementById('alertMeID').addEventListener('click', function(){do_this("some text")}, false);
document.getElementById('alertMeID2').addEventListener('click', function(){do_this("another text")}, false);

function do_this(sendingParameter){document.body.innerHTML += sendingParameter;}

The first time I click on one of the images it works properly. But, if I click a second time, it doesn't work at all.

How to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嗫嚅 2025-01-05 02:56:39

当您使用 innerHTML 时,元素的内容会被重新解析。元素被删除并重新创建,这又会删除事件处理程序。使用 DOM 操作会更好。

function do_this(sendingParameter){
    document.body.appendChild(document.createTextNode(sendingParameter));
}

演示:http://jsfiddle.net/mdtSY/

When you use innerHTML the element's content gets reparsed. The elements are removed and recreated, which in turn removes the event handler. Much better would be to use DOM manipulation.

function do_this(sendingParameter){
    document.body.appendChild(document.createTextNode(sendingParameter));
}

Demo: http://jsfiddle.net/mdtSY/

蓝天 2025-01-05 02:56:39

您可能还想看看: insertAdjacentHTML

它位于 mdn

insertAdjacentHTML() 将指定的文本解析为 HTML 或 XML,并将结果节点插入到 DOM 树的指定位置。它不会重新解析正在使用的元素,因此不会破坏该元素内的现有元素。这避免了额外的序列化步骤,使其比直接的innerHTML操作快得多。

You might also want to take a look at: insertAdjacentHTML

It states at mdn:

insertAdjacentHTML() parses the specified text as HTML or XML and inserts the resulting nodes into the DOM tree at a specified position. It does not reparse the element it is being used on and thus it does not corrupt the existing elements inside that element. This avoids the extra step of serialization, making it much faster than direct innerHTML manipulation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文