Re: [問題] onclick 在 tr 上 **FF已測
要先了解 dom 的 event model。
發生任何 event (click, etc) 的時候,engine 會產生一個 event object,
然後對準 target 丟,中間會經過 target 所有 ancestors,碰到 target 之後,
會再反彈,一樣經過所有 ancestors。碰到 target 之前叫做 capturing phase,
碰到 target 後叫 bubbling phase。一路上每個 node 的 event handler 都會被觸發。
想要讓 event 半路終止要用 event object 的 stopPropagation() method。
所以這問題有兩個解法,第一是在 td event handler 裡多加一個 check,
如果 event target 不是 td 就不作任何事。
另一個解法是讓 td handler 註冊 bubbling phase 的 event,
然後另外寫一個 handler 註冊 input 的 capturing phase event,
而 input 的 handler 則會 call event object 的 stopPropagation() method。
第二個解法比較不好就是了,例如 td 裡面有兩個 child 就兩個 child 都要
有 handler 負責 stopPropagation。
另 stopPropagation 是 w3c dom 才有,ms 要設定 cancelBubble = true。
https://github.com/jquery/jquery/blob/master/src/event.js#L693
你可以看一下 jQuery 怎麼處理 platform 之間的差異。
然後 w3c event object 的 target 在 ms 上面也沒有,ms 的叫做 srcElement,
一樣可以看一下 jQuery 怎麼處理,
https://github.com/jquery/jquery/blob/master/src/event.js#L524
這個 method 是 jquery 用來 normalize event object 的。
--
Oni devas ami animalojn. Ili estas tiel bongustaj.
One should love animals. They are so tasty.
每個人都應該愛動物,他們是如此美味。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.180.46.115
推
02/22 20:46, , 1F
02/22 20:46, 1F
推
02/22 21:39, , 2F
02/22 21:39, 2F
推
02/22 23:01, , 3F
02/22 23:01, 3F
→
02/22 23:01, , 4F
02/22 23:01, 4F
→
02/22 23:05, , 5F
02/22 23:05, 5F
→
02/22 23:06, , 6F
02/22 23:06, 6F
→
02/22 23:10, , 7F
02/22 23:10, 7F
→
02/22 23:10, , 8F
02/22 23:10, 8F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):