我创建了工具提示来替换默认浏览器“TITLE”bubble。我已经阅读了很多主题,并且所有主题都建议我暂时删除title
上的mouseover
并稍后重新启用它。我正在努力做到这一点,但我没有做到。这是我的代码以及我使用jQuery live
的原因是因为我希望以后将效果应用于动态添加的元素:
tooltip : {
activate : function(selector){
$(selector).each(function(){
$(selector).live('mouseover',function(e){
tooltip.init(this,true,e);
});
$(selector).live('mouseout',function(e){
tooltip.init(this,false,e);
});
});
},
init : function(elem,show,e){
var title = $(elem).attr('title');
this.addTip(elem,show,title);
...
},
addTip : function(elem,show,title) {
var code = '<div class="tooltip-wrapper">'+title+'</div>';
if(show) {
$(elem).after(code);
setTimeout('$(".tooltip-wrapper").fadeIn("slow")',500);
}
else {
$(".tooltip-wrapper").remove();
}
}
}
我将此脚本称为:
tooltip.activate(selector);
我遇到的另一个问题是,如果我尝试HIERARCHY_REQUEST_ERR: DOM Exception 3
,则会出现tooltip.activate("*");
错误,但如果我使用input
作为选择器,则会有效。
非常感谢任何输入: - )
答案 0 :(得分:1)
我只想指出几个问题:
live
内使用each
会违背live
的想法。 each
遍历现有元素,而不是未来元素。 each
(在activate
中),因为live
已经应用于多个元素。因此,在您的情况下,如果您有N个元素,那么您将添加相同的事件侦听器N次。*
适用于所有元素,效率可能非常低。如何尝试[title]
(适用于具有title
属性的元素)mouseenter
和mouseleave
代替mouseover
和mouseout
。如果具有标题的元素具有子元素,则希望在鼠标进入/退出子元素时工具提示继续显示。答案 1 :(得分:1)
这样的事情怎么样?
addTip : function(elem,show,title) {
var code = '<div class="tooltip-wrapper">'+title+'</div>';
if(show) {
$(elem).after(code);
$(elem).removeAttr('title');
setTimeout('$(".tooltip-wrapper").fadeIn("slow")',500);
}
else {
$(".tooltip-wrapper").remove();
$(elem).attr('title',title);
}
}