javascript - 如何在从隐藏 div 动态复制的附加按钮上添加事件监听器?

标签 javascript html css

document.getElementById('btn1').addEventListener("click", function() {
 document.getElementById('div2').innerHTML = document.getElementById('hidden-div').innerHTML;
});
document.getElementById('btn2').addEventListener("click", function() {
 document.getElementById('div-main').innerHTML = "";
});
<div id="div-main">
	<input type="button" name="button1" value="button1" id="btn1">
</div>
<div id="div2">
	    
</div>
<div  style="display: none;">
    <div id="hidden-div">
	    <input type="button" name="button2" value="button2" id="btn2">
    </div>
</div>

我想在点击button1时添加一个button2,当我点击button1时,button2最初位于隐藏的div中,然后button2进入div2,但当我点击button2时,它的事件不起作用。

最佳答案

getElementById('hidden-div').innerHTML返回 string ,而不是 DOM 元素。该字符串被传递到 #div2并解析为 DOM 元素,这意味着最初绑定(bind)的事件不再绑定(bind)在 <input> 上。

事实上,innerHTML任何绑定(bind)事件复制 HTML 的常用方法。

要保留事件,您有两种选择:

  • 将其绑定(bind)到 #div2而不是按钮
  • 或者不要破坏 <input> 。相反,使用 appendChild 附加它.

绑定(bind)到#div2 :

document.getElementById('btn1').addEventListener("click", function() {
  document.getElementById('div2').innerHTML = document.getElementById('hidden-div').innerHTML;
});
document.getElementById('div2').addEventListener("click", function() {
  document.getElementById('div-main').innerHTML = "";
});
<div id="div-main">
  <input type="button" name="button1" value="button1" id="btn1">
</div>
<div id="div2">

</div>
<div style="display: none;">
  <div id="hidden-div">
    <input type="button" name="button2" value="button2" id="btn2">
  </div>
</div>

使用appendChild :

document.getElementById('btn1').addEventListener("click", function() {
  let children = document.getElementById('hidden-div').children;
  for (let i = 0; i < children.length; i++) {
    document.getElementById('div2').appendChild(children[i]);
  }
});
document.getElementById('btn2').addEventListener("click", function() {
  document.getElementById('div-main').innerHTML = "";
});
<div id="div-main">
  <input type="button" name="button1" value="button1" id="btn1">
</div>
<div id="div2">

</div>
<div style="display: none;">
  <div id="hidden-div">
    <input type="button" name="button2" value="button2" id="btn2">
  </div>
</div>

重要说明:将绑定(bind)移至 click 内function 表示每次都会进行绑定(bind) #btn1被点击。这对你来说不是问题,因为你正在销毁并重新创建 #div2 的内容同样,但是如果您对另一个构造使用相同的逻辑,而该构造不会删除内容,则您将多次绑定(bind)相同的函数,这很危险,因为它可能会导致难以检测到错误。

关于javascript - 如何在从隐藏 div 动态复制的附加按钮上添加事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901709/

相关文章:

Javascript 垃圾收集通知

javascript - 新建一个div,显示在页面鼠标光标所在的位置

css - slim 过渡可以有条件吗?

javascript - 如何将控制台和文档上的内置方法分配给 javascript 中的变量?

javascript - IE停止脚本警告

html - 到底是什么导致宽度比我网页上的宽度大?

HTML5翻译方法,如何重置为默认值?

html - "sidebar"似乎附加到 "main,"但我不确定如何/如何撤消

html - 处理转换 :translate? 的 Chrome 或 Safari 的移动版本是否有任何怪癖

javascript - iron-ajax 绑定(bind)并将 JSON 写入文件