javascript - 在事件监听器中执行未定义的回调是否可以?

标签 javascript jquery html dom-events

我正在编写一段代码,在单击一组元素时执行一个函数。它具有重新验证功能。此重新验证功能在窗口调整大小时触发。它会检查在调整大小后是否不满足某些条件,然后在单击正文时不应执行任何操作。这是一个过于简化的版本。代码:

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/

相关文章:

javascript - 使用 if 语句并有多个成功案例

javascript - 找到值之间匹配的最简单方法是什么

javascript - Cookie 并不总是有效

javascript - Jquery验证: if input has specific value : error

javascript - 在同一个 HTML 页面上显示 HTML 和 XML 内容

javascript - Jquery 旋转图像

javascript - 从 window.history 中查找上一个 URL

javascript - 如何在 jQuery 中决定窗口的高度和滚动位置?

javascript - 如何在客户端将下载的内联图像转换为 Base64

html - 有效的 HTML5 iframe 代码在 IE8 上显示滚动条