【发布时间】:2017-03-24 15:26:02
【问题描述】:
我正在编写一个代码,该代码在单击一组元素时执行一项功能。它具有重新验证功能。此 revalidate 函数在窗口调整大小时触发。它检查调整大小后是否不满足某些条件,然后单击正文时不应执行任何操作。这是一个过于简化的版本。代码:
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 来分离处理程序。但实际代码更复杂。它是一个类似于代码的插件,如果我单击事件在插件定义内的某些条件下绑定。如果我使用off,然后适当地再次使用On,我可能不得不再次运行整个插件代码;这超出了revalidate 函数的目的。所以,
在事件监听器中执行未定义的回调可以吗?
P.S:我也一直在阅读有关 jQuery.noop 的信息。似乎是使用它的确切情况。
【问题讨论】:
-
undefined是不可执行的,所以我不推荐它。您始终可以将其设置为空函数:myCallback = function () {}; -
我的意思是...你试过吗?如果可以的话,那会很快告诉你。不过,更好的选择是在 myFunction 中简单地有一个条件。
-
@KevinB 是的,我试过了,效果很好。
-
变量
myCallback不会在每次事件发生时进行评估,而是在您分配事件处理程序时进行评估。重新分配myCallback不会使处理程序未定义。 -
@KevinB 获得第二意见可能不是一个坏主意。浏览器行为可能有很大不同,测试所有可能的选项可能不可靠或不可行。这里的某个人可能能够引用一个可以更明确地回答或提出一些可能的陷阱的规范。
标签: javascript jquery html dom-events