[编辑回复成员托尼的研究]
所以,如果没有额外的代码,这有点盲目,但在我看来,这里有两件事需要考虑:1. 默认浏览器工具提示行为;2. 一个潜在更新的 DOM 以及您的自定义工具提示继续运行的能力。
关于#1: 当您将自定义事件绑定到元素时,您可以使用,event.preventDefault()
以便不出现工具提示。这不能正常工作。因此,继续使用“title”属性的解决方法是获取值,将其推送到数据对象($.data()
函数)中,然后将标题设为空字符串(removeAttr 不一致)。然后在鼠标离开时,您从数据对象中获取值并将其推回标题中。这个想法来自这里:How to disable tooltip in the browser with jQuery?
关于#2:不需要在 DOM 更改时重新绑定,您只需要绑定一次到永远不会被销毁的侦听器元素。通常这是某种容器元素,但如果您真的需要一个包罗万象的容器,它甚至可以是document
(近似于.live()
现在已弃用)。这是一个使用我自己设计的假标记的示例:
var container = $('.section');
container.on('mouseenter', 'a', function() {
var $this = $(this);
var theTitle = $this.attr('title');
$this.attr('title', '');
$('#notatooltip').html(theTitle);
$.data(this, 'title', theTitle);
});
container.on('mouseleave', 'a', function() {
$('#notatooltip').html('');
var $this = $(this);
var storedTitle = $.data(this, 'title');
$this.attr('title', storedTitle);
});
我不切实际的标记(仅用于此示例)在这里:
<div class="section">
<a href="#" title="foo">Hover this foo!</a>
<div id="notatooltip"></div>
</div>
一个小提琴在这里:http : //jsfiddle.net/GVDqn/
或者进行一些健全性检查:http : //jsfiddle.net/GVDqn/1/
可能有一种更优化的方法来做到这一点(老实说,我没有研究过是否可以使用一个选择器为两个单独的事件绑定两个单独的函数),但它可以解决问题。
您不需要根据 DOM 更改重新绑定,委托的侦听器会自动处理它。并且您应该能够仅通过阻止它来阻止默认工具提示功能。