作者B9 (葉酸酸)
看板Ajax
標題Re: [問題] onclick 在 tr 上 **FF已測
時間Wed Feb 22 19:43:26 2012
要先了解 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
推 bibo9901:推 02/22 20:46
推 kerash:先推,JS研究不夠深.. 02/22 21:39
推 s25g5d4:稍稍建議一下 上色盡量不要挑重色系 可以選亮藍色比較好 02/22 23:01
→ s25g5d4:識別 02/22 23:01
→ B9: 顏色選藍色是故意的,因為網址幾乎是 "亂碼" 沒有意義, 02/22 23:05
→ B9: 不過還是有人想要看見網址內容,所以選了深藍色,而不是黑色 02/22 23:06
→ B9: 另一個原因是按 convention 來說,各大 browser 給 link 的 02/22 23:10
→ B9: default style 就是藍色。 02/22 23:10