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 回答