我注意到一个有趣的行为,想知道是否有人可以解释其中的原因。
它是这样分解的:
- 我添加了一个
div
and a button
使用 Javascript 的 `appendChild'。
- 我添加一个
onclick
按钮的处理程序,工作正常
- 我添加分配
innerHTML
of the div
添加更多内容
- Button
onclick
完全停止工作
这是一个示例脚本:
var D = document.createElement("DIV"), B = document.createElement("BUTTON");
B.innerHTML = "Is it true?";
document.body.appendChild(D);
D.appendChild(B);
B.onclick = function() { alert("Elvis Lives!"); }
此时,效果很好。然后,添加这一行:...
D.innerHTML += "What about Tupac?";
...按钮坏了。所以,我只是使用appendChild
现在对于所有元素。
But -
- 为什么会发生这种情况(“看起来应该有效:)”)
- 有修复吗(除了附加我所有的额外元素之外)?
(这是很多有根据的猜测)我认为当你修改时D
's innerHTML
, 内的 domD
被销毁并从新值中创建。所以当新的内容被构建出来时,你会得到一个全新的button
,它与以下节点不是同一节点B
。因为你设置了onclick
通过 js 处理程序而不是通过原始元素上的属性,新的button
没有该函数参考。然而B
仍然有效,可以通过调用来证明
B.click();
附加到之后innerHTML
.
防止 dom 内部的抖动D
,你可以这样做而不是使用innerHTML
:
D.appendChild(document.createTextNode("What about Tupac?"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)