2012-02-29 7 views
3

jQueryのonmouseupハンドラで、同じ要素のイベントの後にclickというイベントがある場合は、それを知る方法はありますか?jquery:mouseupの後にクリックイベントが発生するかどうかを確認するにはどうすればよいですか?

メニューハイパーリンクのイベントハンドラがあり、ユーザが要素をクリックするか、または要素上で(ドラッグアンドドロップのように)ドロップすると、バインドが解除されます。 clickが次に来たら、マウスアップ時にハンドラのバインドを早めに解除するのを避けたいと思います。

私はmousedownmouseupのイベントを自分自身で追跡したり、解決策を見つけたりすることができます(クリックがすぐに来るかどうかを確認するのに50msec待ちます)。しかし、この目的のために。

+8

用:最初のステップは、そのようなもので、取ります未来を予測する? –

+0

:-)ブラウザは、マウスアップがクリックを生成するかどうかを知っているので、将来の予測は正確ではありませんが、ブラウザがその知識にアクセスする手段を提供していない場合、私はcrstyal ball territory –

+0

しかし、ブラウザはすでに必要なものすべてを提供しています。マウスダウン/マウスアップイベントは、クリックイベントよりも「低レベル」と考えてください。マウスボタンを細かく調整する必要がある場合は、 'up'と' down'を使用して独自のタイミングコードを記述します。もっと抽象化し、コントロールが必要ない場合は、 'click'を使用してください。すぐに両方を使用しないでください。 –

答えて

3

あなたのニーズに本当に固有のものなので、何も組み込みません。したがって、jQueryがクリック、ロングクリック、移動などの任意の組み合わせを処理するかどうかを判断するために、数十万のコードとドキュメントが必要になります。

あなたのニーズを満たすスニペットを与えるのも難しいですが、setTimeoutは通常jQueryのできる場合、あなたが求めている

obj.mouseup = function(){ 
    obj.click = action; // do action 
    setTimeout (function() { 
     obj.click = functionOrigin // after 500 ms, disable the click interception 
    }, 500); 
}; 
+0

うん、私は短いタイムアウト解決策に行くことになった。ありがとう! –

2

あなたは(「イベント」)$(セレクタ).dataセクションを使用することができますだから

$('div').mouseup(function(){ 
if($(this).data('events').click){ 
    console.log('Has a click event handler') 
} 
}); 
+0

+1要素のjqueryイベントハンドラを見つけるためのポインタは...別のプロジェクトでそれについて疑問に思っていました。 –

関連する問題