作者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