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

标签 javascript greasemonkey innerhtml

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

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;}

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

如何解决这个问题?

最佳答案

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

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

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

关于javascript - 带有参数和innerHTML的事件监听器只能工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980815/

相关文章:

jQuery.noConflict 用户脚本中的奇怪行为,仅在 Firefox 中

javascript - 使用ajax和innerHTML插入时,图像不会在ie9中显示,直到用户右键单击并单击 "Show Pictures"

javascript - 在鼠标悬停时从调整大小的 Canvas 获取像素颜色

javascript - CSS - 使用 greasemonkey 更改完全可见的文本行

javascript - 在greasemonkey脚本中显示元素后立即修改元素(不是在页面完全加载后)?

jquery - 如何通过 jQuery 中的类获取特定 html 元素的 innerHTML?

javascript - 为什么使用 element.innerHTML 后事件监听器会停止工作?

javascript - 滚动到底部的解决方案并不总是到页面的绝对末尾

javascript - 提交后隐藏div

javascript - 父级 Div 保持最高子级的高度