2011-09-12 11 views
1

我的鼠標操作觸發了html和body的自定義函數,但滾動條和頁面上的表單現在變得對鼠標點擊無響應!如何覆蓋子元素的jQuery綁定?

$('html,body').bind('mousedown mouseup mouseover mousemove', function(e){ 
    e.preventDefault(); //this is required :(
    customFunction(); 
}); 

(爲什麼需要防止默認?全customFunction here

如何保護身體,同時保持形式使用和滾動條功能的結合?

我有一個的jsfiddle演示這裏,顯示到底發生了什麼:
http://jsfiddle.net/Ywg9T/

+4

做e.preventDefault()的目的是什麼?你想防止什麼? – Ergec

+1

您可以使用'e.target'來找出鼠標正下方的內容,並有條件地檢查以避免某些元素的preventDefault。 –

+0

也許'event.stopPropagation()'會有幫助嗎?測試[這裏](http://jsfiddle.net/Shef/9WCcz/),看看這是你需要的! – Shef

回答

2

這是jQuery的一個bug,與事件相關的啓動選擇。它太頻繁地開火。有一張票申請它,它計劃在1.8固定。在此期間,您可以通過hackily移除事件處理程序解決此問題(其中「元素」是要禁用它的元素 - 在你的情況下,整個文件):

element.onselectstart = function() { return false; }; 

然後你不'不得不做preventDefault。所以,你的代碼看起來像這樣:

document.onselectstart = function() { return false; }; 
(function($){ 
    var drag = false; 
    $("#click").bind('mousedown mouseup mouseover mousemove', function(e) { 
     if(e.type === 'mouseover'){ ... } 
     if(e.type === 'mousemove'){ ... } 
     if(e.type === 'mousedown'){ ... } 
     if(e.type === 'mouseup'){ ... } 
    }); 
})(jQuery); 
+0

工作示例:http://jsfiddle.net/Ywg9T/3/ 非常感謝Ben! – Mohammad