Javascript 带有参数和innerHTML的事件侦听器只工作一次

Javascript 带有参数和innerHTML的事件侦听器只工作一次,javascript,greasemonkey,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" st

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

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;}
document.body.innerHTML+='';
document.body.innerHTML+='';
document.getElementById('alertMeID').addEventListener('click',function(){do_this(“some text”)},false);
document.getElementById('alertMeID2').addEventListener('click',function(){do_this(“另一个文本”)},false);
函数do_this(sendingParameter){document.body.innerHTML+=sendingParameter;}
我第一次点击其中一张图片时,它工作正常。但是,如果我再次单击,它根本不起作用


如何解决此问题?

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

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

演示:

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

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

演示:

您可能还想看看:insertAdjacentHTML

它指出:

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

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

您可能还想看看:insertAdjacentHTML

它指出:

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

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

+1,但文本节点不应直接添加到正文中,它们应位于块元素中。但我怀疑任何浏览者都不会对此抱怨。+1,但文本节点不应该直接添加到正文中,它们应该位于块元素中。但我怀疑任何浏览者都不会对此抱怨。