rappel jquery html

Existe-t-il un rappel de la fonction html () ou un moyen de vérifier qu’elle est terminée? Par exemple:

$("#some_div").html('something here'); if($("#some_div").html() == ''){ //do something here } 

Je suis en train de définir le code HTML d’un élément à partir d’un article. Parfois, il ne se charge pas, alors quand il ne se charge pas, j’aimerais que cela fasse quelque chose, est-ce possible. La façon dont je l’ai maintenant fait toujours l’autre chose parce qu’il n’a pas défini le code HTML au moment où il vérifie qu’il a le code HTML.

html() est une opération synchrone. La mise à jour réelle du DOM dépend de votre contenu HTML. Si vous avez des balises ou , leur chargement prendra du temps. L’instruction suivante qui suit html() devrait immédiatement afficher le nouveau contenu html.

Voulez-vous dire load() place?

[Edit] D’après votre commentaire, c’est probablement votre $.ajax échoue. Pas html() . Essayez de joindre un gestionnaire d’échec à un appel ajax et réessayez à partir de là? Cependant, si le code côté serveur échoue en mode silencieux avec un code 200, l’événement d’échec n’est pas appelé. Dans ce cas, vous pouvez valider la valeur html avant de la définir sur l’élément.

La réponse de Chetan Sastry (la réponse la plus élevée actuellement) n’est pas correcte à 100%.

 $('#some_div').html('
some content
'); // code 1 $('#new_div').click(function(){ }); //code 2

Je ne sais pas pourquoi, mais dans certains cas, le code 2 sera exécuté avant la fin du code 1. Il y a un court laps de temps inférieur à 0 milliseconde entre le code 1 et le code 2. Il devrait s’agir de commandes d’exécution spéciales en Javascript.

Vous devez utiliser la méthode de cballou (la réponse du groupe = _ =!) Pour résoudre le problème. par exemple

 var sync = function(fn, millisec){ var m = millisec ? millisec : 0; //in face, 0 is enough return setTimeout(fn,m); }; $('#some_div').html('
some content
'); // code 1 var code2 = function(){ $('#new_div').click(function(){ }); // run code 2, here }; sync(code2);

La seule façon que j’ai trouvée avec live et callback,

 $('p').live('click', function() { // delay dont work with html() // fcallback function $(this).parent('div').slideUp('slow', function() { // empty block $(this).html(''); if($(this).html()==''){ // function myFunction(); } }); }); 

J’espère que quelqu’un a une meilleure solution que moi. Une solution rapide consiste à utiliser setTimeout () pour retarder vos prochains appels, en laissant à votre bloc HTML suffisamment de temps pour être chargé (car le temps de chargement est vraiment minuscule).

 $('#some_div').html('
some content
'); // set timeout for 250 milliseconds setTimeout(callbackFunction, 250); function callbackFunction() { // do some cool sh*t }

Notez cependant que si vous souhaitez transmettre des variables à votre fonction, vous pouvez procéder comme suit:

 $('#some_div').html('
some content
'); // set timeout for 250 milliseconds var myParam = 'value'; setTimeout(function() { callbackFunction(myParam); }, 250); function callbackFunction(myParam) { // do some cool sh*t alert(myParam); }