3

hover(mouseenter/mouseout) イベントとそれに関連付けられたハンドラーを持つ要素があります。このイベントを一度非アクティブ化したいのですが、ページが読み込まれるかアクションが実行されるまで、同じハンドラーを再度指定せずに再アクティブ化できるといいのですが。

私が次のようなことをした場合:

$(element).on('mouseout', handler); //Initial state when i prepare my object
$(element).off('mouseout'); //To turn off the event for the time-being.

ここで、イベントを再開/再関連付けしたい場合は、ハンドラーも再割り当てする必要があります。

私の要件は次のようなものです:

  1. イベントとハンドラーをバインドします。

    $(element).on('eventName', handler)
    
  2. コード:

    $(element).freezeEvent(); //It wont trigger the mouseenter/mouseout event.
    
  3. コード:

    $(element).unFreezeEvent(); //It will make mouseenter/mouseout event and its original handler to be called up.
    

提案してください。手順と流れはこれだけでいい。

4

1 に答える 1

1

非常に簡単な解決策は、ハンドラー自体でフリーズを処理することです..

var handler = function (event) {

  if (!$(event.target).isFrozen()) {

     // do whatever you like...
  }
}

このための jQuery 拡張機能:

$.fn.freeze = function () {

  return this.each(function () {

    $(this).data('frozen', true);
  });
}

$.fn.unfreeze = function () {

  return this.each(function () {

    $(this).data('frozen', false);
  });
}

$.fn.isFrozen = function () {

  return !!this.eq(0).data('frozen');
}

次のように要素を凍結および凍結解除します。

$(element).freeze(); // returns jQuery object for chaining
$(element).unfreeze(); // returns jQuery object for chaining

現在の状態を取得します。

var state = $(element).isFrozen(); // returns true or false

ハンドラーがアタッチされるとすぐにトリガーを取得しないようにするには、アタッチする前に要素をフリーズします。

$(element).freeze().on('someEvent', handler);
于 2012-10-12T12:58:16.703 に答える