作者grence (多想兩分鐘 = =")
看板Ajax
標題Re: [問題] jquery attr onclick IE7 & 8
時間Sun Jan 30 03:36:38 2011
http://www.w3.org/TR/DOM-Level-2-Events/events.html
void addEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
第三個參數 useCapture,意思是…先來個圖比較好解釋
http://goo.gl/bamuu
click 某個 button實際發生的事是,
以 html→body→button→body→html 這樣的順序去觸發 click事件
capturing bubbling
從父往子叫 capturing,從子往父叫 bubbling,所以需要第三個參數指定順序
簡單的範例:
http://jsfiddle.net/ndKcr/1/
點內層的 div看事件的觸發順序就知道差別了
==
然後,用ajax更新(append)的 dom元素不會觸發事件是因為…通常都會忘記重新綁事件。
jquery的解法:live就是把事件綁在 body上,
它強大的 selector會找到是誰該觸發什麼事件。
如果瞭解標準定義的事件模型,
就會覺得 live的事件都要跑到 body才觸發,在效能上會不會比較慢?
所以在 1.4之後多了 delegate可以讓你指定該綁在哪,而不是統一綁在 body上。
這樣的方式(live, delegate)也可解決直接把事件綁在 dom元素上,
移除 dom元素可能會造成某些 *破舊* 瀏覽器產生的 memory leak問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.10.63
→ TonyQ:live 只要給 context 也可以指定綁在哪. 01/30 04:44
→ TonyQ:所以我很少用delegate 01/30 04:44
→ grence:喔,對,感謝補充 01/30 21:50
→ gaekeamql:請問 live 怎麼給 context 01/31 21:32
→ TonyQ:jq("td","table").live這樣可以把事件綁在table上。 02/01 07:34
→ TonyQ:看 doc 有說明... 02/01 07:34