jquery rebind()禁用特定时间的事件,然后重新绑定它们

单击按钮后,我的脚本会加载新内容。 只要它正在加载我就不希望可点击的元素列表。

有没有办法取消绑定这些元素的点击事件,加载内容,然后正确“重新绑定”事件?

我想要阻止的是每个click-function / element中的if语句。

这是我尝试过的:

$(load_button).click(function(){ $('a').each(function(){ var dis_e = $(this).data('events'); $(this).data('disabled-events', dis_e); }).unbind('click'); $(some_content).load(function(){ $('a').each(function(){ var dis_e = $(this).data('disabled-events'); $(this).removeData('disabled-events'); $(this).bind('click', dis_e); }); }); }); 

更新:

它还应该防止元素(在这种情况下)警告“点击”:

 $('a').click(function(){ alert('click'); }); 

您可以临时将新的click事件与您的元素的特定命名空间绑定,以阻止Click事件传播,并在加载内容时解除绑定事件。

 $("a").bind("click.disabled", function(e) { e.stopImmediatePropagation(); return false; }); 

后来:

 $("a").unbind("click.disabled"); 

编辑:正如Yoshi所指出的,这要求您的click事件处理程序在自定义事件之前附加到元素。 所以我可以通过两种方式看到这个:

  1. 要么在创建它们时始终将此事件处理程序绑定到每个元素,以便始终在自定义单击事件处理程序之前调用它们。 并且您只执行stopImmediatePropagation()并在加载数据时return false
  2. 或者您检查这个其他问题,以便您的新事件处理程序在列表中排在第一位。

如果您选择第一种方法,您的活动将是这样的:

 var clicDisabled = false; $("a").bind("click.disabled", function(e) { if (true == clicDisabled) { e.stopImmediatePropagation(); return false; } }); 

然后在加载内容时,暂时将变量clicDisabled设置为true。

根据你的答案,我写了以下插件:

 (function($){ $.fn.rebind = function(){ var init = 'init-rebind'; return this.each(function() { var is_init = $(this).data(init); if (!is_init){ $(this).data(init, true); $(this).bind('click.rebind mouseenter.rebind mouseleave.rebind', function(e){ if ($(this).hasClass('disabled')){ e.stopImmediatePropagation(); e.preventDefault(); } }); } }); }; })(jQuery); 

我决定添加/删除“禁用”类,而不是使用全局变量,以便在css中控制。

看看演示 !

THX对所有人!


更新:检查出来!!