9
votes

Comment charger une fonction jQuery uniquement après la fin du chargement du document

Situation étrange:

Je construis une barre de menus utilisant jQuery et CSS .
Dans mon fichier JavaScript, j'ai une fonction sur-prêt comme: xxx

et ... xxx < / Pré>

Pour une raison quelconque, même avant Tout le chargement de la fin du document, je reçois le message d'alerte avec une largeur incorrecte. Seulement lorsque je relâche le message, le reste du document chargé et je reçois la largeur de droite comme il se doit.

Pourquoi ma fonction est appelée avant tout le chargement de la fin du document? Existe-t-il un moyen de charger la fonction uniquement après un certain élément de chargement (exemple: l'élément NAV )?


6 commentaires

Chargez-vous des parties de votre document avec Ajax?


Vous pouvez accrocher à $ (fenêtre) .on ('redimensionner', fn) ou $ (fenêtre) .On ("charger", fn) .


De plus, la méthode prête () n'est pas adoptée l'événement, mais plutôt l'objet JQuery lui-même.


Oui, j'ai peu de pièces Ajax mais elles ne sont pas dans ma fonction prête $ (document)


@Bradm Eh bien, le code ne l'utilise pas, donc nous ne saurons pas si c'était censé être un événement :)


@Lior Peu importe où ils sont. $ (document) .Ready (et $ (fenêtre) .charger ) n'attends pas le contenu dynamique. Vous devez attendre jusqu'à ce que toutes les demandes soient terminées.


6 Réponses :


13
votes

Vous pouvez utiliser window.load , ce sera déclenché après que toute la ressource a terminé le chargement.

$(window).load(function(e) {
    mark_active_menu();
});


4 commentaires

Cela n'a pas de sens. Le sélecteur est $ ("NAV LI") ... Je ne vois aucune image ni aucune image ... Le problème est avec Ajax charger le contenu.


@Lan I Dons Ajax dans mon code, mais aucune n'est chargée avec le document, mais seulement après la déclenchement de l'utilisateur.


@Lior donc si rien n'est mis sur la page jusqu'à ce que après L'utilisateur le déclenche, comment $ (document) .Ready exécuter au bon moment? De toute façon, $ (fenêtre) .charger ne doit pas faire de différence pour votre problème pour la même raison


@Lan $ (fenêtre) .LoLLa résolu mon problème. Je pense que vous avez raison si un Ajax impliqué dans votre charge. Je vous apprécie le temps !!



2
votes

Assurez-vous, essayez la fenêtre charger xxx


1 commentaires

Cela ne fait aucune différence - le problème est avec Ajax charger le contenu.



3
votes

Essayez sur l'événement de chargement de la fenêtre:

$(window).load(function() {
    //Stuff here
});


1 commentaires

Cela ne fait aucune différence - le problème est avec Ajax charger le contenu.



8
votes

Toutes les solutions actuelles ne traitent que des symptômes du problème principal. Si vous voulez que votre gestionnaire soit exécutant après em> tous vos charges AJAX, vous pouvez utiliser une promesse.

var ajax1 = $.ajax();
var ajax2 = $.ajax();

jQuery(function($) {
    $.when.apply($, [ajax1, ajax2]).done(function() {
        // your code here
    });
});


2 commentaires

Les autres réponses ne prennent aucune matière ajax en considération. Les demandes AJAX peuvent être effectuées ou non à effectuer à l'heure window.Onload incendies. C'est la bonne réponse. Je voudrais éviter que je n'ai plus de votes à gauche :(


Merci, cela fonctionne extrêmement bien. Y a-t-il de toute façon pour que cela se produise encore plus vite? Je devais remplacer le texte dans un DIV chargé de manière dynamique, cela fonctionne, il n'ya qu'un petit retard.



0
votes

Avant (parfois, ne se charge pas absolument au début, quelques millisecondes après (0-200ms environ)): xxx

après: xxx < / pré>


0 commentaires

0
votes

Dans ma situation de travail avec Ajax et HTML. J'ai le même problème avec les fonctions $ (document) .Readady () et $ (fenêtre) .charger (). J'ai résolu ce problème en ajoutant un gestionnaire de mon événement (qui devrait fonctionner à HTML DOC), à la fonction JQuery qui fonctionne juste après la fin de l'Ajax Reguest. Lisez ceci: "" jquery.post () " (troisième paramètre dans la fonction).

dans mon code, il ressemble à ceci: xxx


0 commentaires