[为回复成员 Tony 的研究而编辑]
所以,如果没有额外的代码,这有点盲目,但在我看来,这里有两件事需要考虑:1. 默认浏览器工具提示行为; 2. 可能更新的 DOM 以及您的自定义工具提示继续运行的能力。
关于#1:当您将自定义事件绑定到元素时,您可以使用event.preventDefault(),这样工具提示就不会出现。 这不能正常工作。因此,继续使用“title”属性的解决方法是获取值,将其推送到数据对象($.data() 函数),然后使用空字符串将标题设为空(removeAttr 不一致)。然后在 mouseleave 上,您从数据对象中获取值并将其推回标题中。这个想法来自这里: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 更改重新绑定,委托的侦听器会自动处理它。您应该能够通过阻止默认工具提示功能来阻止它。