有没有一个优雅的方式来暂时抑制jQuery事件?我使用这样的代码:
$(element).unbind(event,function1).unbind(event,function2); // code for which the event is suppressed $(element).bind(event,function1).bind(event,function2);
但是我发现它有点笨拙,并且不是很多可扩展的许多事件。为什么要暂时抑制事件?我使用BlockUI插件在Ajax访问期间阻止UI。这是通过BlockUI提出的$()。ajaxStart($。blockUI).ajaxStop($。unblockUI)完成的。
但是,一个Ajax访问是特别的,所以我需要一个不同的消息。 ajaxStart和ajaxStop事件会干扰消息代码(没有显示):
function message(text,callback) { if (text == undefined) { $.unblockUI(); return; } // $().unbind('ajaxStop',$.unblockUI).unbind('ajaxStart',$.blockUI); $("#message_text").html(text); $.blockUI({message: $("#message")}); $("#message_ok").click(function() { // $().bind('ajaxStop',$.unblockUI).bind('ajaxStart',$.blockUI); $.unblockUI(); if (callback != undefined) callback(); }); }
只有当我取消绑定unbind()和bind()行,它是正常工作。
解决方法
我意识到这个问题是旧的,但是我在找到同样的问题的答案时发现了这个问题,最终找到了一个在事件处理程序的简单应用程序中运行良好的解决方案。
$(element).click(function(e) { e.preventDefault(); // Check for fired class if ($(this).hasClass('fired') == false) { // Add fired class to all instances of element $(element).addClass('fired'); // Do the rest of the function... // Remove fired class to 'reactivate' events $(element).removeClass('fired'); } }
简单的添加一个类到你的’元素,而事件的代码被触发可以防止进一步的代码被执行作为另一个点击事件的结果。所以当你实际上并没有阻止任何其他的点击事件时,你阻止了所产生的代码的运行。简单,粗暴,忽略了大量传讲的使用绑定和解除绑定,但工作。