看板 Ajax 關於我們 聯絡資訊
要先了解 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