クリックとドラッグ可能なハンドラーが添付された画像へのリンクがあります。
リンクを移動する場合(たとえば、リンクをドラッグする場合)、クリックハンドラーを無効にしたいのですが。
それよりも、それを再アクティブ化するので、クリックするだけで取得できます。
どのようにできるのか?.unbindはハンドラー全体を削除すると思います...
// bind it
$('#id').on('click', click_handler);
// unbind it
$('#id').off('click', click_handler);
// bind it again
$('#id').on('click', click_handler);
次を使用できます。
.unbind('click')
使用した場合.bind()
また:
.off('click')
使用した場合.on()
それ以外の場合は、例外を追加できます。
$('a').click(function(e) {
if ( ... ) {
e.preventDefault();
}
});
編集:
jQuery-UIを使用すると、リンクにストップハンドラーがなくても正常に機能します。このソリューションに興味がある場合は、JsFiddleを実行しました。
つまり、ドラッグ中にアンカークリックイベントが干渉しないようにするには、リンク/アンカータグのすべてのクリックイベントをキャプチャして、ドラッグ可能な場合の停止イベントに接続します。たとえば、次のようになります。
var cancelFollow = false;
$(function(){
$("anchorElement").click(function(e){
e.stopPropagation();
if (cancelFollow)
{
cancelFollow = false;
return false;
}
return true;
});
$("imageElement").draggable({
....
start: function(e, ui){},
stop: function(e, ui){
cancelFollow = true;
}
});
});
ハンドラーのバインドを解除してから再バインドする代わりに、キルスイッチとして機能するグローバル変数(ブール値)を実装する方が読みやすいと思います。
質問にコードスニペットが含まれていないので、ランダムな例を投稿します。
var doNotExecute = false;
$(".myClassItem").click(function() {
if(doNotExecute) return false;;
//Now do your normal processing.
});
これで、イベントの実際の発生を停止したいときdoNotExecute
にいつでも設定できるようになりました。true
後で戻すことを忘れないでくださいfalse
:-)
グローバルスコープでハンドラーを作成します..ドラッグアクションでクリックがトリガーされない場合があります...これを考慮すると、イベント委任を使用してイベントのバインドを解除しないようにするのが最善の方法です。
$('#container').on('click', 'ATagClass', handler(e){/* ... */});
ハンドラー内では、クラスまたはその他のプロパティをチェックして、e.targetがタグであるかどうかをチェックする必要があります...#containerが常にタグの祖先になるようにしてください。