Dys*_*ium 18 jquery tooltip jquery-plugins live tipsy
我们最近将jQuery升级到1.9.0,但它打破了我们的醉意插件.它的live功能现在导致错误.
$('.tooltip, abbr').tipsy({
live: true
});
TypeError: this[binder] is not a function
Run Code Online (Sandbox Code Playgroud)
是否有任何修复或补丁?谷歌搜索没有带来任何有用的东西.
更新:
谢谢你的回答.我决定尝试自己修复这个问题,因为我找不到任何补丁.
经过检查,错误似乎很容易追查.可以轻松修补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);
}
Run Code Online (Sandbox Code Playgroud)
有:
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);
}
Run Code Online (Sandbox Code Playgroud)
奇迹般有效.:)
你需要包含jquery迁移插件,因为你正在使用live:true它来使用jquery.1中删除的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);
}
}
Run Code Online (Sandbox Code Playgroud)