1

我有一个第三方服务从我们的主站点中提取我们的一个 JS 文件。这样做的原因是为了使页眉和页脚中的各个部分都能正常工作(它们是从我们的主站点复制的)。第三方服务使用了非常旧的 jQuery 版本,这会导致.on()方法调用失败。我正在尝试编写一些东西来检测这一点并切换到不推荐使用的方法。我现在工作得很好(我们现在只在这个文件中使用点击事件......现在):

if(!$.isFunction($.fn.on)) {
    $.fn.on = $.fn.click;
}

我想让上述任何事件都有效,以便在我们的主文件中,我们仍然可以使用.on()新版本的 jQuery 合并的相同方法,而不会破坏第三方应用程序。我尝试过的不起作用:

if(!$.isFunction($.fn.on)) {
    $.fn.on = function(event, callback) {
        return $.fn[event](callback());
    }
}

我在这里做错了什么?

4

1 回答 1

2

您执行回调太早了。

if(!$.isFunction($.fn.on)) {
    $.fn.on = function(event, callback) {
        return $.fn.bind.call(this,arguments);
    }
}

这也遗漏了许多使用 .on 的不同方式,但要真正做到这一点,而不只是复制 .on 的源代码,需要花点时间。

不过,您真的不应该这样做,它可能会导致您无法预测的现有页面出现其他奇怪的情况,因此我建议只使用.bind. 直接,因为它存在于所有版本的 jQuery 中,并将继续存在以实现向后兼容性。

于 2013-09-19T20:54:06.747 回答