0

多数の要素に関連付けられているクリック、dblclick などのイベントがいくつかあります。一度にすべての要素で click および dblclick イベントのバインドを解除するには、これを jquery で使用しました。

 $(document).unbind("click").unbind("dblclick");

ここで、これらのイベントをすべての要素に再度バインドする必要があります。このために私は使用しました:

 $(document).bind("click").bind("dblclick");

しかし、これは機能していません。イベントは再バインドされません。これどうやってするの?

4

3 に答える 3

3
$(document).bind("click").bind("dblclick");

これは何もバインドしないと思います。コールバックが必要です。

$(document).bind("click", onClick).bind("dblclick", onDbClick);

また、この場合、名前空間付きのイベントの使用を検討することをお勧めします:

$(document).bind("click.myclick", onClick)

その後、このイベントのみをバインド解除し、他のイベントはそのままにしclickます。

$(document).unbind("click.myclick");

PSバインドに新しいon,メソッドを使用することをお勧めします。off

于 2013-01-15T10:15:58.823 に答える
1

解放する:

$(document).off("click", myFunction);

練る:

$(document).on("click", myFunction);

function myFunction() {
    alert('you clicked the document');
}

jQueryの on()off()がその方法です。再バインドするときは、関数を再度渡す必要があります。再バインドして、呼び出す関数を知っていると期待することはできません。

于 2013-01-15T10:17:28.150 に答える
0

最良の方法は、@adeneo が提案したように、コールバック関数に名前を付けることです。しかし、ハンドラーがいつバインドされるか (プラグインの f.ex) がわからない場合や、次のようなものを使用して匿名のコールバックを追加した可能性があります。

$(document).click(function() {
    // anonymous
});

その後、オブジェクトを使用してこれらすべてのコールバックを復元でき$._dataます。ここにあなたのための機能があります:

function restoreHandlers(elem, type) {
  var orig = $._data(elem, 'events');
  if ( type in orig ) {
    return $.map(orig[type], function(o) {
      return o.handler;
    });
  } else return [];
}

次のように使用します (アンバインドする前に):

var handlers = restoreHandlers(document, 'click');

次にバインドを解除します。

$(document).off('click');

次に再バインドします。

$.each(handlers, function(i, fn) {
    $(document).on('click', fn);
});
于 2013-01-15T10:31:28.393 に答える