作者gpmm (银色)
看板Ajax
标题Re: [问题] 关於mouse event注册的问题
时间Sun Sep 30 21:11:12 2007
※ 引述《waloddyca (屋拉拉)》之铭言:
[苏姗]
因为你使用的是 .innerHTML 来进行叠加。(笑)
当你使用 parent_div.innerHTML += div_set[i] 时,
实际上是只有将内部 Html 码重新叠加回去,而其中并不包含 onclick 的注册。
所以会不断的遗失被注册的 onclick
举例来说:
第一次:
parent_div.innerHTML = ""
div_set[0] = "<div>A</div>"
parent_div.innerHTML += div_set[0]
=> parent_div.innerHTML = "<div>A</div>"
然後藉由 sub_div_tags[target_tags].onclick = click_event
注册此 <div>A</div>
第二次:
parent_div.innerHTML = "<div>A</div>"
div_set[1] = "<div>B</div>"
parent_div.innerHTML += div_set[1]
=> parent_div.innerHTML = "<div>A</div><div>B</div>"
要注意,这边的 parent_div.innerHTML += div_set[1] 展开来其实是
parent_div.innerHTML = "<div>A</div>" + "<div>B</div>"
而这里被重新指定进来的 html "<div>A</div>" 实际上只剩下了 html 码,
注册进去的 onclick 事件并不会随着 html code 被指定进去。
因此便造成了 onclick 注册事件的流失。
如果要避免此情形,建议以 dom 来操作 node 的增减会比较好,
如此可以完整留住注册过的 onclick 事件。 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.57.130.248
1F:→ TonyQ:也是 , 平常根本不会用 innerHTML操作这种事情 , 都忘了 XD 09/30 21:17
2F:→ gpmm:XD 09/30 22:46