我有第三方服务从我们的主站点提取我们的一个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());
}
}
我在这里做错了什么?
答案 0 :(得分:2)
您过早地执行回调。
if(!$.isFunction($.fn.on)) {
$.fn.on = function(event, callback) {
return $.fn.bind.call(this,arguments);
}
}
这也缺少许多使用.on的不同方法,但实际上只需要复制.on的源代码就可以完成这项工作。
你真的不应该这样做,它可能导致你无法预测的现有页面的其他奇怪,因此我建议只使用.bind
。直接因为它存在于所有版本的jQuery中,并且将继续存在以实现向后兼容。