jQuery可以在jQuery中使用

我们最近将我们的jQuery升级到了1.9.0,但它打破了我们的诡异插件。它的实时功能现在会导致错误。

$('.tooltip, abbr').tipsy({
    live: true
});

TypeError: this[binder] is not a function

有没有修补或补丁呢?谷歌没有导致任何有用的东西。

更新:

感谢您的答案。我决定尝试自己解决问题,因为我找不到任何补丁。

检查后,错误似乎很容易追踪。可以轻松地修补迷人的插件来使用on功能,而不是不推荐使用的实时功能。在诡异的插件中,我更换了以下代码:

if (options.trigger != 'manual') {
    var binder = options.live ? 'live' : 'bind',
        eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    this[binder](eventIn, enter)[binder](eventOut, leave);
}

有:

if (options.trigger != 'manual') {
    var eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    if (options.live)
        $(document).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);
    else
        this.bind(eventIn, enter).bind(eventOut, leave);
}

奇迹般有效。 🙂

你需要包含jquery迁移插件,因为你使用live:true它使用jquery.liveremoved in jquery 1.9

为了向后兼容,他们创建了一个migration plugin,它可以是downloaded here,并且包括迁移插件来添加对删除的方法和实用程序的支持。

我会做一些类似的事情

if (options.trigger != 'manual') {
    var eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
        eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
    if(options.live){
      $(this.context).on(eventIn, this.selector, enter).on(eventOut, this.selector, leave);
    } else {
      this.on(eventIn, enter).on(eventOut, leave);
    }
}
翻译自:https://stackoverflow.com/questions/15473731/tipsy-live-does-not-work-with-jquery-1-9-0

转载注明原文:jQuery可以在jQuery中使用