Tipsy live 不适用于 jQuery 1.9.0

2024-04-09

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

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

TypeError: this[binder] is not a function

有针对此问题的任何修复或补丁吗?谷歌搜索没有找到任何有用的东西。


UPDATE:

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

经过检查,错误似乎很容易追踪。可以轻松地修补 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);
}

with:

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.live http://api.jquery.com/live/这是在 jquery 1.9 中删除 http://jquery.com/upgrade-guide/1.9/#live-removed.

为了向后兼容,他们创建了一个迁移插件 https://github.com/jquery/jquery-migrate/这可以是在这里下载 http://jquery.com/upgrade-guide/1.9/#live-removed并包含迁移插件以重新添加对已删除方法和实用程序的支持。

我会做类似的事情

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tipsy live 不适用于 jQuery 1.9.0 的相关文章

随机推荐