callback html jquery

Esiste un callback per la funzione html () o un modo per controllare che sia finito. Per esempio:

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

Sto impostando l’html di un elemento da un post. A volte non si carica così quando non carica mi piacerebbe che facesse qualcosa, è ansible. Il modo in cui lo ho ora fa sempre l’altra cosa perché non ha impostato l’html nel momento in cui controlla che abbia html.

html() è un’operazione sincrona. L’effettivo aggiornamento del DOM dipende dal contenuto del tuo html. Se hai o , ci vorrà del tempo per caricarli. La prossima istruzione che segue html() dovrebbe vedere immediatamente i nuovi contenuti html.

Intendevi invece load() ?

[Modifica] In base al tuo commento, probabilmente il tuo $.ajax fallito. Non html() . Prova ad associare un gestore degli errori a una chiamata Ajax e riprova da lì? Sebbene, se il codice del lato server non funziona automaticamente con un codice 200, l’evento di errore non viene richiamato. In tal caso, è ansible convalidare il valore html prima di impostarlo sull’elemento.

La risposta di Chetan Sastry (la risposta più alta ora) non è corretta al 100%.

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

Non so perché, ma in alcuni casi, il codice 2 verrà eseguito prima della fine del codice 1. C’è poco meno di 0 millisecondi tra il codice 1 e il codice 2. Dovrebbero essere alcuni ordini di esecuzione speciali in Javascript.

Devi usare il modo di cballou (la risposta del piano = _ =!) Per risolvere il problema. per esempio

 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);

L’unico modo che ho trovato con live e 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(); } }); }); 

Spero che qualcuno abbia una soluzione migliore di me. Una soluzione rapida consiste nell’usare setTimeout () per ritardare le chiamate successive, fornendo al blocco HTML tempo sufficiente per il caricamento (poiché il tempo di caricamento è così minuscolo).

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

Si noti, tuttavia, che se si desidera passare qualsiasi variabile alla propria funzione, è ansible eseguire quanto segue:

 $('#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); }