[edito in risposta alle ricerche per utente Tony]
Così, senza codice aggiuntivo, questo è un po 'un colpo cieco , ma a me sembra che ci siano due cose a cui pensare qui: 1. il comportamento predefinito del tooltip del browser; 2. un DOM potenzialmente aggiornato e la possibilità che i tooltip personalizzati continuino a funzionare.
Per quanto riguarda il numero 1: quando si associa l'evento personalizzato all'elemento, è possibile utilizzare event.preventDefault()
in modo che le descrizioni dei comandi non vengano visualizzate. Questo non funziona correttamente. Pertanto, la soluzione alternativa per continuare a utilizzare l'attributo "title" consiste nell'acquisire il valore, inserirlo nell'oggetto dati (la funzione $.data()
) e quindi annullare il titolo con una stringa vuota (removeAttr è incoerente). Quindi, con il mouseleave, estrai il valore dall'oggetto dati e reinseriscilo nel titolo. Questa idea viene da qui: How to disable tooltip in the browser with jQuery?
Per quanto riguarda il n. 2: invece di re-binding sul cambiamento DOM, è sufficiente associare una volta a un elemento listener che non dovrebbe mai essere distrutto. Di solito questo è un elemento contenitore di qualche tipo, ma può anche essere document
(approssimativo a .live()
che ora è deprecato) se è davvero necessario un contenitore onnicomprensivo. Ecco un esempio che utilizza alcuni markup falso di mia invenzione:
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);
});
mio markup irrealistico (solo per questo esempio) è qui:
<div class="section">
<a href="#" title="foo">Hover this foo!</a>
<div id="notatooltip"></div>
</div>
E un violino è qui: http://jsfiddle.net/GVDqn/ o con qualche controlli di integrità: http://jsfiddle.net/GVDqn/1/
Probabilmente c'è un modo più ottimale per farlo (sinceramente non ho studiato se si potevano associare due funzioni separate per due eventi separati con un solo selettore), ma farà il trucco.
Non è necessario eseguire il reindirizzamento in base alla modifica DOM, il listener delegato lo gestirà automaticamente. E dovresti essere in grado di prevenire la funzionalità del tooltip di default semplicemente prevenendolo.
possibile duplicato di [Come identificare quando il DOM è stato cambiato?] (Http://stackoverflow.com/questions/3744706/how-to-identify-when-the -dom-has-been-changed) –
sembra come provare ad ascoltare ogni cambiamento nel DOM ... e cercare i tuoi elementi ogni volta sarebbe davvero costoso. – charlietfl
possibile duplicato di [Esiste un listener di modifiche DOM jQuery?] (Http://stackoverflow.com/questions/2844565/is-there-a-jquery-dom-change-listener) – APerson