2012-07-16 20 views
11

Ich habe ziemlich viel nach einer Lösung für dieses Problem gesucht, aber bis jetzt nicht gefunden, dass eine, die Browser funktioniert.Wie erkennt man, wenn innerHTML abgeschlossen ist

Was ich brauche, ist eine rohe JavaScript-Funktion, die ein Element nehmen und einen Callback ausführen wird, sobald das innerHTML erfolgreich in das Dom eingefügt wurde.

z.B.

var element = document.getElementById('example'); 
     element.innerHTML = newhtml; 

    waitUntilReady(element, function(){ 
      //do stuff here... 
    }); 

Also einfach zusammenzufassen, ich brauche den Inhalt des Elements in der Lage sein zu überprüfen und einen Rückruf ausgelöst, wenn innerHTML- abgeschlossen hat.

Vielen Dank im Voraus für jede Hilfe.

+1

Warum denken Sie, dass Sie einen Rückruf benötigen? –

+0

@am nicht ich bin - Bitte beachten Sie meinen Kommentar zu Kolinks Antwort – gordyr

+1

Ist das, was Sie suchen? http://james.padolsey.com/javascript/asynchronous-innerhtml/ – noj

Antwort

5

Eine solche Funktion ist nicht erforderlich. Das Zuweisen zu innerHTML wird dies unmittelbar vor dem Ausführen von Skripts tun.

Wenn Sie die Ausführung wirklich verzögern müssen (zB um den Browser neu zeichnen zu lassen), verwenden Sie setTimeout mit einer Verzögerung von 1 (oder einem anderen kurzen Intervall).

+1

Ahh, wenn das dann tatsächlich der Fall ist toll. Aber das hinterlässt immer noch mein ursprüngliches Problem. Ich füge dynamisch ein Skript direkt nach dem Anhängen des HTML ein, das Ereignisse an bestimmte Elemente anfügt, die im neuen HTML enthalten sind. Während dies bei den meisten Browsern gut funktioniert, scheint der ältere IE 8 und darunter, dass das Element ungefähr 50% der Zeit leer ist. Meine Annahme war, dass dies daran lag, dass der neu eingefügte HTML-Code nicht immer 'fertig' war, als ich versuchte, Ereignisse an ihn anzuhängen. – gordyr

+0

Stellen Sie sicher, dass die Skripts der Seite nach der 'innerHTML'-Zuweisung hinzugefügt werden und es keinen Grund gibt, dass sie nicht funktioniert. –

+0

Sie sind in der Tat. In älteren IE-Versionen scheint es jedoch immer noch nur eine Erfolgsquote von 50% zu haben. Ich nehme an, das Problem muss an anderer Stelle in meinem Code liegen und meine Annahme, dass der HTML-Code nicht "bereit" ist, war falsch. – gordyr

Verwandte Themen