我正在编写一段代码,在单击一组元素时执行一个函数。它具有重新验证功能。此重新验证功能在窗口调整大小时触发。它会检查在调整大小后是否不满足某些条件,然后在单击正文时不应执行任何操作。这是一个过于简化的版本。代码:
var myFunction = function() {
// do something
}
var myCallback = myFunction;
$(".myClass").on("click", myCallback);
$(window).resize(function(){
if(//certain conditions are met) {
myCallback = undefined;
}
else {
myCallback = myFunction
}
});
我知道我可以使用 jquery off
来分离处理程序。但实际代码要复杂得多。它是一个类似代码的插件,如果我在插件定义中的某些条件下单击事件,则会绑定(bind)该代码。如果我使用 off
然后再次适本地使用 On
我可能不得不再次运行整个插件代码;这超出了 revalidate
函数的目的。所以,
可以在事件监听器中执行未定义的回调吗?
P.S:我也一直在阅读有关 jQuery.noop
的内容。似乎正是使用它的确切情况。
最佳答案
您的代码不会调用未定义的函数,因为变量 myCallback
仅在您绑定(bind)事件处理程序时才被评估,而不是每次事件发生时。要获得您提出的问题,它必须是以下代码:
$(".myClass").on("click", function(e) {
myCallback.call(this, e);
});
当 myCallback
设置为 undefined 时,这将得到一个错误,提示 undefined
没有属性 call
。你应该写的是:
$(".myClass").on("click", function(e) {
if (myCallback) {
myCallback.call(this, e);
}
});
关于javascript - 在事件监听器中执行未定义的回调是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43003390/