作者gpmm (银色)
看板Ajax
标题[心得] IE 对事件模型的 bug
时间Thu Dec 27 15:01:00 2007
小弟最近在工作的时候顺道开发自己的 js 模组,
在同一元素的挂载功能上,IE 部份都是用 attachEvent 的方式来处理。
譬如说如果一个 img 要实现 drag 和 resize,
会各自在模组中帮他挂上 onmousedown 时候触发的 function。
大体来说模组各自都是像这样的流程(以 drag 为例)
初始时会 element attachEvent onmousedown drag ()
而 drag 中会挂载 document 下的 mousemove 和 mouseup function,
此处挂 document 不挂 element 本身,是为了顺畅移动。
现在小弟遇到很有趣的一个 bug 是,
小弟对一个 img 挂上三个 mousedown event funciton,
分别是 special, drag, resize…
在 special 中,mouse down 後会挂载 document 的 mousemove 和 mouseup,
其中 mouseup function 是将此 img 自目前节点中 remove ,移到另一个 div 内。
但是在 node remove / append 的过程中,IE 似乎会因为节点移动,
使得 event 中断。
流程图大约是这样:
-> mousedown(on img)
-> 触发 special, drag, resize
-> special, drag, resize 各自对 document 的 onmousemove, onmouseup
挂载对应函式。
-> mousemove(drag img)
-> 触发刚刚挂载的 special, drag, resize 对应 mousemove 函式
-> mouseup(drag img stop)
-> 触发刚刚挂载的 special, drag, resize 对应 mouseup 函式,
其中 special onmousemove function 中会将 img 移动到别的 div 下。
-> 一旦 node 移动,此时触发的 mouseup 中断,
造成 drag, resize 的 mouseup function 接不到 mouseup 触发。
不过在 MF 下即使 node 被移动了,drag 和 resize 依旧可以成功收到
mouseup 的 event。
不知道有没有大大有相关经验的? -_-|||
感觉像是 IE 事件模型的 bug …
(另外这不是由於事件触发的顺序所造成的,
已经以各种方式测过 mouseup 时的事件顺序了 囧rz)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.80.28.216
1F:推 chph:你可以选用一套Javascript函式库, 省下自己处理js底层的麻烦 12/27 22:17
2F:→ chph:YUI, jQuery都不错 12/27 22:18
3F:→ TonyQ:不是因为有人处理好,所以问题就可以不用管了吧o_o 01/01 13:33
4F:推 wxyy:生命就是要浪费在美好的事物上... 01/01 17:57
5F:推 chph:从原po可知已有一定基础,为何还不使用JS lib? 01/03 15:11