1

クリックとドラッグ可能なハンドラーが添付された画像へのリンクがあります。

リンクを移動する場合(たとえば、リンクをドラッグする場合)、クリックハンドラーを無効にしたいのですが。

それよりも、それを再アクティブ化するので、クリックするだけで取得できます。

どのようにできるのか?.unbindはハンドラー全体を削除すると思います...

4

5 に答える 5

1
// bind it
$('#id').on('click', click_handler);

// unbind it
$('#id').off('click', click_handler);

// bind it again
$('#id').on('click', click_handler);
于 2012-09-14T09:03:48.870 に答える
1

次を使用できます。

.unbind('click')使用した場合.bind()

また:

.off('click')使用した場合.on()

それ以外の場合は、例外を追加できます。

$('a').click(function(e) {
   if ( ... ) {
      e.preventDefault();
   }
});

編集:

jQuery-UIを使用すると、リンクにストップハンドラーがなくても正常に機能します。このソリューションに興味がある場合は、JsFiddleを実行しました。

于 2012-09-14T09:04:20.313 に答える
1

つまり、ドラッグ中にアンカークリックイベントが干渉しないようにするには、リンク/アンカータグのすべてのクリックイベントをキャプチャして、ドラッグ可能な場合の停止イベントに接続します。たとえば、次のようになります。

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;

    }
  });
});
于 2012-09-14T09:09:17.107 に答える
0

ハンドラーのバインドを解除してから再バインドする代わりに、キルスイッチとして機能するグローバル変数(ブール値)を実装する方が読みやすいと思います。

質問にコードスニペットが含まれていないので、ランダムな例を投稿します。

var doNotExecute = false;

$(".myClassItem").click(function() {

    if(doNotExecute) return false;;

    //Now do your normal processing.

});

これで、イベントの実際の発生を停止したいときdoNotExecuteにいつでも設定できるようになりました。true後で戻すことを忘れないでくださいfalse:-)

于 2012-09-14T09:05:14.470 に答える
0

グローバルスコープでハンドラーを作成します..ドラッグアクションでクリックがトリガーされない場合があります...これを考慮すると、イベント委任を使用してイベントのバインドを解除しないようにするのが最善の方法です。

$('#container').on('click', 'ATagClass', handler(e){/* ... */});

ハンドラー内では、クラスまたはその他のプロパティをチェックして、e.targetがタグであるかどうかをチェックする必要があります...#containerが常にタグの祖先になるようにしてください。

于 2012-09-14T09:14:50.857 に答える