2010-05-07 94 views
11

我目前正在開發一個web應用程序,並遇到一個小問題。我使用ExtJS,但我相信這是一個普通的JS問題。保證onmouseout事件發生

當光標進入HTML元素時,激發onmouseover事件,當光標離開該元素時,觸發onmouseout。到現在爲止還挺好。不幸的是,似乎不能完全依靠這種行爲。非常快速的鼠標移動可能導致事件不能觸發(例如,用筆式平板電腦重新定位光標)。

處理這些問題的最佳做法是什麼?我是否需要監控所有onmousemove事件,並手動跟蹤光標的最後位置,並自己觸發相應的事件onmouseout事件?

回答

3

這是一個常見問題,並不是微不足道的解決。基本上不可能通過在單個元素級別處理鼠標懸停/跳出來解決問題。使用Ext JS時,通常建議儘可能使用委託事件處理,這也可以幫助監視鼠標事件。例如,監視最高級別的鼠標懸停/跳出,並檢查事件目標和/或相關目標(傳遞給處理函數的事件對象的屬性),以確定在給定事件期間涉及哪些元素(我已完成這是我自己 - 它可能會變得棘手,但它是有效的)。如果您的用例正在監視有效的拖放場景,則DragZone和DropZone類可以執行此操作。

如果你可以填寫一些你想要完成的更多細節,可能會有所幫助。

+0

我解決它通過覆蓋Ext.dd.DropZone.notifyOver和手動觸發鼠標事件,如果他們錯過了。似乎到目前爲止工作相當可靠。 – n3rd 2010-05-12 09:46:18

3

我以前有類似的問題,我用this technique。這可能無助於當您使用平板電腦重新定位光標時的情況,我沒有其他人檢查其他情況,但如果您的目標是正常的網絡用戶,則可以認爲這是異常情況。讓我知道如果這是有效的 - 如果沒有,我會看看我能否幫助更多。

Martyn

+0

嗯,有趣的文章。不過,我真的不知道這與我的問題有什麼關係。畢竟,我得到的「太少」事件,並不是太多。 – n3rd 2010-05-10 08:58:09

+1

啊,是的 - 對不起,在我今天早上喝咖啡之前回答了這個問題。沒有絕對的辦法來保證這些事件將會觸發,除非你自己動手。正如Konerak所說的,在頁面中添加一個監聽器並檢查它被觸發的元素。我會彈出onmouseover方法中的當前元素,並在onmouseout中彈出它,您需要編寫一些邏輯來查看它是否在某處出錯。不優雅,但應該工作。再次,對不起我的困惑 – Martyn 2010-05-10 09:35:56