是否可以在不破坏后代事件侦听器的情况下附加到innerHTML?

迈克:

在以下示例代码中,我将onclick事件处理程序附加到包含文本“ foo”的范围。该处理程序是一个匿名函数,会弹出一个alert()

但是,如果我将其分配给父节点的innerHTML,则此onclick事件处理程序将被销毁-单击“ foo”将无法弹出警报框。

这个可以解决吗?

<html>
 <head>
 <script type="text/javascript">

  function start () {
    myspan = document.getElementById("myspan");
    myspan.onclick = function() { alert ("hi"); };

    mydiv = document.getElementById("mydiv");
    mydiv.innerHTML += "bar";
  }

 </script>
 </head>

 <body onload="start()">
   <div id="mydiv" style="border: solid red 2px">
     <span id="myspan">foo</span>
   </div>
 </body>

</html>
本·布兰克:

不幸的是,innerHTML即使您要附加,分配给也会导致所有子元素的破坏。如果要保留子节点(及其事件处理程序),则需要使用DOM函数

function start() {
    var myspan = document.getElementById("myspan");
    myspan.onclick = function() { alert ("hi"); };

    var mydiv = document.getElementById("mydiv");
    mydiv.appendChild(document.createTextNode("bar"));
}

编辑:鲍勃的解决方案,从评论。发表您的答案,鲍勃!为此获得信誉。:-)

function start() {
    var myspan = document.getElementById("myspan");
    myspan.onclick = function() { alert ("hi"); };

    var mydiv = document.getElementById("mydiv");
    var newcontent = document.createElement('div');
    newcontent.innerHTML = "bar";

    while (newcontent.firstChild) {
        mydiv.appendChild(newcontent.firstChild);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查是否有附加到元素/文档的JavaScript事件侦听器/处理程序?

使用addEventListener获取附加到节点的事件侦听器

如何检查是否存在动态附加的事件侦听器?

使用JSF 2.0 / Facelets,是否可以将全局侦听器附加到所有AJAX调用?

是否可以在不将事件引发给侦听器的情况下为JList设置所选项目?

修改HTML标签而不丢失附加的事件侦听器

事件侦听器在没有事件的情况下执行并遍历HTML集合

如何使用事件委托而不是将事件侦听器分别附加到每个项目?

使用纯JavaScript,是否有简单的方法将事件侦听器附加到类?

使用纯JavaScript,是否有简单的方法将事件侦听器附加到类?

如何在不覆盖的情况下附加XML数据?

如何在不丢失“ event”属性的情况下将参数传递给事件侦听器的回调函数?

如何在Angular 6+中将事件侦听器正确附加到全局“窗口”?

将事件侦听器附加到UWP中的MotionAnimation

使用事件侦听器在不使用jquery的情况下触发keypress事件

如何在不覆盖R的情况下附加到R中的现有文件?

将事件侦听器附加到FOR循环内的对象

Hashchange事件侦听器在将事件处理程序附加到事件之前进行侦听

在某些情况下,事件侦听器无法附加或删除

在没有处理程序引用的情况下覆盖侦听器,是否可以访问Ext.data.store上的(可能是私有的)事件属性?

使用tmux启动shell并仅在未附加会话的情况下附加到会话

转换事件侦听器不执行

如何在不添加引号的情况下附加列表

将异步侦听器附加到单击事件

将侦听器附加到 scrollController

Android Firestore 快照侦听器指标在没有事件侦听器的情况下注册

是否可以在 if 语句中嵌套 jQuery 事件侦听器?

如何在不更新已存在的关联行的情况下附加到 Gorm 中的多对多关系?

如何在不编辑 Makefile 的情况下附加到 Makefile 中的 CXXFLAGS?