javascript:comment écrire $(document).prêt comme un événement sans jquery
en jquery $(document).ready(function) ou $(function) , comment pourrais-je faire la même chose sans jquery, et j'ai besoin de navigateur compatiable, et permettent d'attacher plus d'une fonction.
Note: dom prêt!= fenêtre onload
- J'ai regardé le jQuery, le code source et il est tout à fait un morceau de code en matière de prêt() du gestionnaire. Si j'ai lu le code correctement, l'événement est appelé
DOMContentLoaded
. IE ne prend pas en charge ce, de manièreonreadystatechange
est utilisé à la place. - Aussi, il a à voir avec
document.readyState
ayant la valeur"complete"
- Vidas: Il a à faire avec beaucoup de choses (iframe chargement a ses propres particularités? Qui l'eut cru?), et franchement, c'est un étonnant morceau de code. Je me suis rappelé pourquoi je n'ai plus enregistrer les événements directement - c'est un pain PITA de le faire bien.
- double possible de $(document).prêt équivalent sans jQuery
- Je crois que vous êtes mieux à l'aide de jQuery que de réinventer la roue. Il a juste trop de bizarreries (lire les problèmes de compatibilité navigateur) de réfléchir
Vous devez vous connecter pour publier un commentaire.
C'est la façon jQuery encapsule les fonctions que vous êtes à la recherche pour - l'extrait de code n'a pas besoin de jQuery, et est compatible avec tous les navigateurs. J'ai remplacé tous les appels à jQuery.prêt() avec
yourcallback
- que vous devez définir.Ce qui se passe ici:
DOMContentLoaded
est défini, qui sera utilisé lors de l'événement DOMContentLoaded feux - il s'assure que le callback n'est appelé qu'une seule fois.document.addEventListener
/document.attachEvent
) et de lier les callbacks (différent pour IE et les navigateurs normales, plus le rappel onload)Levée de jQuery 1.4.3, les fonctions bindReady() et DOMContentLoaded:
Que de 51 lignes de JavaScript code, il vous suffit de vous inscrire à l'événement de manière fiable. Autant que je sache, il n'existe pas de méthode plus facile. Va à montrer ce que les wrappers comme jQuery sont bons pour: ils ajoutent la capacité de renifler et laid problèmes de compatibilité, de sorte que vous pouvez vous concentrer sur autre chose.
</body>anything that's not whitespace</html>
est la soupe de tags, mais pas en HTML (et absolument pas en XHTML). Qui, à son tour, les forces de l'quirks mode de rendu (c'est à dire "la page est complètement cassée, nous allons essayer de lire l'esprit de l'auteur" en mode). Si vous pensez que - en 2010 - que QM est une bonne chose (élégant même!), il est inutile d'essayer de vous convaincre du contraire. Amusez-vous avec vos pages de s'afficher différemment dans chaque navigateur. Quant à moi, j'en ai assez de cette compatibilité dans l'enfer de la dernière décennie.Plus petit DOMReady code, jamais.
eval()
sous le capot. Mais cool le truc de l'homme!C'est tout ce dont vous avez besoin si vous êtes en soutenant IE9+ et moderne (2013) versions de Chrome, FF, Safari, etc.
Voici une méthode que j'utilise qui semble fonctionner de manière fiable
Assez simple, il ne cesse d'essayer d'ajouter un vide
<span>
élément dedocument.body
. Si le document n'est pas "prêt", une exception sera levée, auquel cas il essaie à nouveau avec une nouvellesetTimeout
appel. Une fois aucune exception n'est levée, il appelle la fonction de rappel.Je serais heureux de les entendre s'il y a des problèmes avec cette méthode. Il a bien fonctionné pour moi, mais je n'ai pas fait le test approfondi qu'il serait naturel de n'importe quel framework Javascript.
setTimeout/setInterval
avec 0 ms de retard n'est pas la même chose qu'un conditionnel boucle while. Avec la façon dont les minuteries de travail en JS, et la simplicité des opérations au sein de la fonction d'expiration de cet exemple, la performance ne devrait pas être significativement affectés.J'ai vu beaucoup de façons différentes d'essayer de le faire. La façon la plus simple (proposé par yahoo d'abord, je pense) est de simplement appeler votre initialiseur de fonction après la clôture balise body, un peu encombrant, mais c'est une seule ligne.
Modifier
Le DomReady événement n'existe pas nativly en javascript. Vous pouvez implémenter votre propre en suivant quelques merveilleux travail fait par des gens comme Dean Edwards ici et ici avec ceux en place, vous pouvez effectuer un événement similaire attachement processus sur le document au lieu de la fenêtre.
Découvrez user83421 réponse à Comment puis-je ajouter une fenêtre supplémentaire.événement onload en Javascript
Pour récapituler ici.
J'ai ce après le "près du corps" tag et avant le "près html' de la balise. et ça marche plutôt bien. Le chargement des presets fonction attribue la largeur,la hauteur et la position de valeurs css des balises div. utile pour les différentes tailles d'écran.
}