JQuery On and Live



我有一个JavaScript文件MyJavascript.js,它包含在各种Web应用程序中。问题是在一个应用程序中我使用 JQuery v1.5.1,其中"Live"功能工作得很好,但在另一个应用程序中,由于我使用 Bootstrap,所以我使用 v2.1.1.,其中"on"有效而"live"不起作用。

有什么方法可以让我的 JS 文件以适用于两个版本的 JQuery 的方式编写

++ Abhay

你总是可以用自己的函数扩展jQuery对象,使事情成为可能。

此问题的解决方案是以下函数:

(function($) {
  $.fn.compatibleOn = function(event, handler){
    if(typeof jQuery().on === 'function')
    {
      $(this).on(event, handler);
    }
    else
    {
      $(this).live(event, handler);
    }
  }
})( jQuery );

您现在只需致电

jQuery('.my-link').compatibleOn('click', function(){alert('TEST');});

有关工作示例,请参阅 http://jsfiddle.net/acs884t2/1/。

我相信

你可以在两个版本中使用delegate()函数。另一种选择是测试 jQuery 对象中是否存在 on() 函数,如果缺少该函数,则在修补的函数中使用 delegate()live() 创建它。

下面是如何执行此操作的示例:

if(!$.fn.on) {
    $.fn.on = function(event, selector, handler) {
        if (arguments.length == 2) {
            return this.bind(event, selector);
        } else {
            return this.delegate(selector, event, handler);
        }
    };
}

经过编辑以支持更多on()功能

感谢您的回答。

将事件附加到动态添加元素的问题仍然存在。所以,我写了一个Javascript函数,如下所示:

function compatibleOn(event, selector, handler) {
  if (typeof jQuery().on === 'function') {
    $(document).on(event, selector, handler);
  } else {
    $(selector).live(event, handler);
  }
};

最新更新