我有一堆不同事件的按钮。
当应用程序处于“ super ”模式时,我需要禁用所有这些事件,但保持其中 2-3 个处于事件状态。
做这样的事情最好的方法是什么?我是否需要取消绑定(bind)每个处理程序,或者我是否可以 super 一些防止默认行为的事件?
最佳答案
我不知道有一种方法可以像您似乎在问的那样以自动方式简单地禁用然后重新启用(几乎)页面上的所有事件。
但实现最终结果的两个非常简单的技术是:
解除绑定(bind),稍后重新绑定(bind)。如果有很多绑定(bind)会有点麻烦,听起来很乱,但是如果你把所有的绑定(bind)代码放在一个函数中,而所有的解除绑定(bind)代码放在另一个函数中,打开和关闭它们只是调用这些函数的问题而且您没有重复的代码。您可能应该将初始 jQuery 选择器的结果缓存在一个变量中,这样您就可以仅解除绑定(bind)并重新绑定(bind)最初与选择器匹配的元素,即使它们已经更新以至于它们不再匹配(例如,如果最初按类选择并且该类稍后可能会被删除)。
设置一个
eventsDisabled
标志,并让您的所有事件处理程序在执行任何操作之前检查该标志。
像这样简单的东西可以工作:
var eventsDisabled = false;
$("some selector").on("some event", function() {
if (eventsDisabled) return;
// actual event handling code here
}
// in some other part of your code:
eventsDisabled = true; // turn off all events
显然这样做的缺点是您必须在所有事件处理程序的开头添加额外的一行,除了少数您希望一直保持事件状态的事件处理程序,但这只是三个单词和一些括号......
关于javascript - 禁用页面上的(大多数)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8768501/