tipsy live不适用于jQuery 1.9.0

时间:2013-03-18 09:47:15

标签: jquery jquery-plugins tooltip live tipsy

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

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

TypeError: this[binder] is not a function

是否有任何修复或补丁?谷歌搜索没有带来任何有用的东西。


更新

感谢您的回答。我决定尝试自己修复这个问题,因为我找不到任何补丁。

检查后,错误似乎很容易追踪。可以轻松修补tipsy插件以使用on功能而不是已弃用的live功能。在tipsy插件中,我替换了以下代码:

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);
}

像魅力一样工作。 :)

2 个答案:

答案 0 :(得分:9)

您需要包含jquery迁移插件,因为您使用live:true它会使用jquery.live removed 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);
    }
}

答案 1 :(得分:0)

问题是此插件仍然使用.live()让您使用您在那里使用的方法live,它已被弃用并已替换为.on()

您应该尝试搜索插件的更新版本,或尝试自行替换它。