Re: [問題] onclick 在 tr 上 **FF已測

看板Ajax作者 (葉酸酸)時間12年前 (2012/02/22 19:43), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串3/3 (看更多)
要先了解 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
先推,JS研究不夠深..
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
另一個原因是按 convention 來說,各大 browser 給 link 的
02/22 23:10, 7F

02/22 23:10, , 8F
default style 就是藍色。
02/22 23:10, 8F
文章代碼(AID): #1FHDJXrc (Ajax)
文章代碼(AID): #1FHDJXrc (Ajax)