tipsy live不适用于jQuery 1.9.0
我们最近将jQuery升级到1.9.0,但它打破了我们的醉意插件。 它的live
function现在导致错误。
$('.tooltip, abbr').tipsy({ live: true }); TypeError: this[binder] is not a function
对此有任何修复或补丁吗? 谷歌搜索并没有带来任何有用的东西。
更新:
谢谢你的回答。 我决定尝试自己修复这个问题,因为我找不到任何补丁。
经过检查,错误似乎很容易追查。 可以轻松修补tipsy插件以使用on
function而不是不推荐使用的live
function。 在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); }
奇迹般有效。 🙂
你需要包含jquery迁移插件,因为你正在使用live:true
它使用了在jquery 1.9中删除的jquery.live 。
为了向后兼容,他们创建了一个迁移插件 ,可以在此处下载并包含迁移插件,以添加对已删除方法和实用程序的支持。
我会做类似的事情
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); } }
问题是这个插件仍然使用.live()
来让你在那里使用的方法工作,它已被弃用并已被.on()
取代。
您应该尝试搜索插件的更新版本或尝试自己替换它。