在.bind()和.on()之间动态切换

Switch between .bind() and .on() - dynamically

本文关键字:动态 之间 bind on      更新时间:2023-09-26

我想这么做,因为我正在使用与互联网营销相关的第三方脚本。其中一些可能包含jQuery库,它会干扰我网站上最近或最新的jQuery库。

因此,我想在变量的帮助下,在网站加载时动态地在.on()和.bind()之间切换。

例如,假设我有全局变量:

var incJS = false;

现在取决于第三方脚本,我知道他们是否包含旧的Lib,所以我会使用它。

function tpNetwork ()
{
    incJS = true;
    startGateway('XXXXX');
    $('#fancybox-outer')
        .delay(1000)
        .fadeTo(300, 1);
    preventGTW();
    widgetStyle();
}

现在,正如你所看到的,在widgetStyle() 的最底部有一个函数

这个函数包含很多东西,但重要的部分如下:

$(window).on('resize', function () {
    if ($('.widget_wrap').length) widgetCenter_horizontal();
});

它有.on()方法。这在第三方网络使用的非常旧的jQuery中是不支持的。我想用.bind()切换每一个.on(),但我不知道如何切换,以免重复。我是这样做的,但它是重复的,我相信有更简单的方法。

if (!incJS)
{
    $(window).on('resize', function () {
        if ($('.widget_wrap').length) widgetCenter_horizontal();
    });
}
else
{
    $(window).bind('resize', function () {
        if ($('.widget_wrap').length) widgetCenter_horizontal();
    });
}

任何形式的提示/帮助都将不胜感激。我真的没有任何想法,通过研究我一无所获。

关于:

$(function(){
    if(!$.fn.on) $.fn.on = $.fn.bind;
});

当然,这不包括任何代表团的支持。

演示

感谢@smerny的评论和@shocked的回答,我把它做成了这样,它解决了我的问题。感谢您提供的所有提示和答案!

$.fn.onbind = function () {
    if (!ajaxGateway)
        $.fn.onbind = $.fn.on;
    else
        $.fn.onbind = $.fn.bind;
};

现在一切都如我所愿。下面是一个例子。

$(window).onbind('resize', function () {
    if ($('.widget_wrap').length) widgetTop();
});