代码之家  ›  专栏  ›  技术社区  ›  Babiker

为什么即使是JavaScript运行之前,即使是动态插入对象的处理程序也不火吗?

  •  1
  • Babiker  · 技术社区  · 14 年前

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

    <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.body.innerHTML = document.body.innerHTML; .

    为什么事件处理程序在 body.innerHTML = body.innerHTML; 即使对象object.id仍然是相同的,并且在javascript之前已经加载?
    我看过现场表演,一切都一样。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ming-Tang    14 年前

    当您重新分配body.innerHTML时,即使是它本身,innerHTML也会更改,并且DOM会重置。也就是说 a#hyper 重新创建 以及 onclick 被摧毁了。

    自赋值标识(注:Haskeller表示)可能不存在吸气剂和定位器。

        2
  •  1
  •   Community datashaman    7 年前

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

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

    javascript cloneNode and properties

    推荐文章