最近在使用jquery開發中遇到一個問題,就是鼠標松開事件mouseup不觸發。
首先我檢查了代碼,確認綁定鼠標松開事件的元素并沒有問題,也沒有其他的js代碼阻止了事件的觸發。
我開始懷疑是瀏覽器的問題,但是在多個主流瀏覽器中都出現了這個問題,所以瀏覽器不是問題的原因。
最后,我仔細檢查代碼,發現原來是mousedown事件中阻止了事件冒泡導致的。因為在鼠標按下時,我需要阻止事件冒泡,但是在鼠標松開時,事件就被阻止了。
// 鼠標按下事件 $(document).on('mousedown','#box',function(e){ e.stopPropagation(); // other code... }); // 鼠標松開事件 $(document).on('mouseup','#box',function(){ console.log('mouseup'); // 不會觸發 });
解決辦法是在事件綁定時,使用一個事件監聽器來處理事件冒泡問題,而不是在事件中直接處理。
// 鼠標按下事件 $(document).on('mousedown','#box',function(e){ e.stopPropagation(); // other code... // 使用事件監聽器處理事件冒泡問題 $(document).off('mouseup', '#box').on('mouseup', '#box', function(){ console.log('mouseup'); // 正常觸發 }); });
這樣就可以保證在鼠標按下時阻止事件冒泡,在鼠標松開時又能夠正常觸發鼠標松開事件了。
上一篇清除緩存css
下一篇清除浮動最佳方式css