作者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
1F:推 bibo9901:推 02/22 20:46
2F:推 kerash:先推,JS研究不够深.. 02/22 21:39
3F:推 s25g5d4:稍稍建议一下 上色尽量不要挑重色系 可以选亮蓝色比较好 02/22 23:01
4F:→ s25g5d4:识别 02/22 23:01
5F:→ B9: 颜色选蓝色是故意的,因为网址几乎是 "乱码" 没有意义, 02/22 23:05
6F:→ B9: 不过还是有人想要看见网址内容,所以选了深蓝色,而不是黑色 02/22 23:06
7F:→ B9: 另一个原因是按 convention 来说,各大 browser 给 link 的 02/22 23:10
8F:→ B9: default style 就是蓝色。 02/22 23:10