2011-09-12 14 views
1

私は、マウスとマウスのクリックが反応しなくなりました。子要素の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のバグです。それはあまりにも頻繁に起こります。提出されたチケットがあり、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/ あまりにも多くのベンをありがとう! – Mohammad

関連する問題