[心得] IE 對事件模型的 bug

看板Ajax作者 (銀色)時間17年前 (2007/12/27 15:01), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串1/5 (看更多)
小弟最近在工作的時候順道開發自己的 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

12/27 22:17, , 1F
你可以選用一套Javascript函式庫, 省下自己處理js底層的麻煩
12/27 22:17, 1F

12/27 22:18, , 2F
YUI, jQuery都不錯
12/27 22:18, 2F

01/01 13:33, , 3F
不是因為有人處理好,所以問題就可以不用管了吧o_o
01/01 13:33, 3F

01/01 17:57, , 4F
生命就是要浪費在美好的事物上...
01/01 17:57, 4F

01/03 15:11, , 5F
從原po可知已有一定基礎,為何還不使用JS lib?
01/03 15:11, 5F
文章代碼(AID): #17SqsjnN (Ajax)
文章代碼(AID): #17SqsjnN (Ajax)