Pour ajouter à l'excellente réponse de HurnsMobile; En regardant bindReady()
, qui est l'appel interne jQuery fait de se lier à l'événement de chargement de documents chaque fois que vous appelez $(some_function)
ou $(document).ready(some_function)
nous voyons pourquoi nous ne pouvons pas lier à "ready"
:
bindReady: function() {
if (readyBound) {
return;
}
readyBound = true;
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if (document.readyState === "complete") {
return jQuery.ready();
}
// Mozilla, Opera and webkit nightlies currently support this event
if (document.addEventListener) {
// Use the handy event callback
document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
// A fallback to window.onload, that will always work
window.addEventListener("load", jQuery.ready, false);
// If IE event model is used
} else if (document.attachEvent) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent("onload", jQuery.ready);
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) { //and silently drop any errors
}
// If the document supports the scroll check and we're not in a frame:
if (document.documentElement.doScroll && toplevel) {
doScrollCheck();
}
}
}
Pour résumer $(some_function)
, appelle fonction qui se lie à:
- DOMContentLoaded
- onreadystatechange (DOMContentLoaded)
- window.load/onload
Votre meilleur pari serait de se lier à ces actions qui pourraient créer nouveaux .tooltipper
éléments, plutôt que d'essayer d'écouter l'événement prêt (ce qui arrive une seule fois).
Si l'élément existe déjà, pourquoi utiliser '.live()'? Je pense que vous feriez mieux d'essayer de le lier à l'événement qui pourrait potentiellement créer de nouveaux sélecteurs. Pas directement une réponse, mais il semble comme une approche d'un fusil de chasse à utiliser '.live()' sur 'ready'. Juste mon $ .02. – HurnsMobile
Je pense de cette façon. Certains éléments doivent toujours présenter certains comportements. Par exemple, les liens avec un attribut 'href' devraient toujours vous mener à une URL lorsque vous cliquez dessus. La plupart des éléments avec un attribut 'title' doivent afficher le paramètre sous la forme d'une info-bulle au survol de la souris. Cela n'a de sens que d'activer ce type de fonctionnalité pour les comportements d'ordre supérieur, comme le tooltipping personnalisé. –
J'ai fini par utiliser '$ ('. Tooltipper'). Livequery (function() {$ (this) .tooltip()})', ce qui me semble le plus sémantique (par opposition à la meilleure solution suivante, qui consiste à ajouter le rappel à la fonction qui crée l'élément tooltip) en ce que le comportement de l'info-bulle est associé à l'élément --- cela n'a rien à voir avec le processus par lequel il a été créé. –