Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么即使动态插入对象的处理程序在javascript运行之前就已经存在,也不激发它们呢?_Javascript_Dom_Javascript Events - Fatal编程技术网

为什么即使动态插入对象的处理程序在javascript运行之前就已经存在,也不激发它们呢?

为什么即使动态插入对象的处理程序在javascript运行之前就已经存在,也不激发它们呢?,javascript,dom,javascript-events,Javascript,Dom,Javascript Events,我正在开发客户端应用程序。在过去的两天里,我一直在不停地工作,试图弄清楚到底发生了什么。我的代码有点太长,无法发布到可以解释我的问题所在的位置,我已经将问题所在的位置缩小到以下场景/问题。以下是我所拥有的: <html> <head> </head> <body> <a href="#" id="hyper">Link</a> </body> </body&g

我正在开发客户端应用程序。在过去的两天里,我一直在不停地工作,试图弄清楚到底发生了什么。我的代码有点太长,无法发布到可以解释我的问题所在的位置,我已经将问题所在的位置缩小到以下场景/问题。以下是我所拥有的:

<html>
    <head>
    </head>
    <body>
        <a href="#" id="hyper">Link</a>
    </body>
</body>
</html>
<script type="text/javascript">
    document.getElementById("hyper").onclick = function(){alert("Link clicked!");};
    document.body.innerHTML = document.body.innerHTML;
</script>

document.getElementById(“hyper”).onclick=function(){alert(“Link clicked!”);};
document.body.innerHTML=document.body.innerHTML;
此代码在没有
document.body.innerHTML=document.body.innerHTML的情况下运行良好

为什么事件处理程序在
body.innerHTML=body.innerHTML之后不触发即使对象object.id仍然相同,并且在javascript之前加载过?

我已经查看了live DOM,所有内容都是一样的。

当您重新分配body.innerHTML时,即使是它本身,innerHTML也会更改,DOM会重置。这意味着,
a#hyper
重新创建,其
onclick
被销毁

自我分配标识(注意:称为Haskeller)可能不存在于getter和setter中。\

有一个很好的答案-基本上,当Javascript重新插入HTML字符串时,DOM会重新生成。生成的DOM看起来可能相同,但Javascript中的编程引用都已设置为新地址

保留事件处理程序和方法的解决方案如下:


谢谢史蒂夫。我阅读了其他文章,了解到尽管源代码相同,但事件处理程序所设置的对象已被销毁。但我没有尝试在我的场景中模仿解决方案。你能用我的例子写一段话来说明它是如何实现的吗?