[editado en respuesta a la investigación por el miembro de Tony]
Así, sin código adicional, esto es un poco de un golpe ciego , pero me parece que hay dos cosas en las que pensar: 1. el comportamiento predeterminado de la información sobre herramientas del navegador; 2. un DOM potencialmente actualizado y la posibilidad de que sus tooltips personalizados continúen funcionando.
En cuanto al n. ° 1: cuando enlaza su evento personalizado al elemento, puede usar event.preventDefault()
para que no aparezcan los consejos sobre herramientas. Esto no funciona correctamente. Entonces, la solución para seguir utilizando el atributo "título" es tomar el valor, insertarlo en el objeto de datos (la función $.data()
) y luego anular el título con una cadena vacía (removeAttr es inconsistente). Luego, en mouseleave, tomas el valor del objeto de datos y lo vuelves a insertar en el título. Esta idea proviene de aquí: How to disable tooltip in the browser with jQuery?
En relación con el n. ° 2: en lugar de volver a vincular el cambio DOM, solo tiene que vincular una vez a un elemento detector que nunca se espera que se destruya. Por lo general, este es un elemento contenedor de algún tipo, pero incluso puede ser document
(aproximadamente .live()
, que ahora está en desuso) si realmente necesita un contenedor que lo abarque todo. He aquí un ejemplo que utiliza algunas marcas falsa de mi propia invención:
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);
});
Mi marcado realista (sólo para este ejemplo) está aquí:
<div class="section">
<a href="#" title="foo">Hover this foo!</a>
<div id="notatooltip"></div>
</div>
Y un violín está aquí: http://jsfiddle.net/GVDqn/ O con alguna controles de cordura: http://jsfiddle.net/GVDqn/1/
Probablemente haya una forma más óptima de hacerlo (sinceramente, no investigué si podría vincular dos funciones separadas para dos eventos separados con un selector), pero lo hará.
No debería necesitar volver a vincular en función del cambio DOM, el detector delegado lo manejará automáticamente. Y debería poder evitar la funcionalidad predeterminada de información sobre herramientas simplemente impidiéndola.
posible duplicado de [Cómo identificar cuando el DOM se ha cambiado?] (Http://stackoverflow.com/questions/3744706/how-to-identify-when-the -dom-has-been-changed) –
parece tratar de escuchar cada cambio en DOM ... y buscar sus elementos cada vez sería realmente costoso. – charlietfl
posible duplicado de [¿Hay un escucha de cambio de jQuery DOM?] (Http://stackoverflow.com/questions/2844565/is-there-a-jquery-dom-change-listener) – APerson