Wenn ich schreibe die html:jQuery ändern html Text von über Array iterieren
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<h1 id="message">
</h1>
und JS:
messages = ["Here", "are", "some", "messages."]
$(function() {
for (var i = 0; i < messages.length; i++) {
$('#message').html(messages[i]).delay(1000);
}
});
und die Seite laden, ich erwarte, dass jede Zeichenfolge in der Array Show sehen mit einer Verzögerung dazwischen. Alles was ich sehe ist jedoch "Nachrichten". erscheinen. Es scheint, dass die for-Schleife sofort durch jeden Wert im Array iteriert, bevor irgendeine Verzögerung auftritt.
Ich habe eine andere Methode gesehen, um das gewünschte visuelle Ergebnis zu erhalten (How can I change text after time using jQuery?), aber ich würde gerne wissen, warum die frühere Methode nicht funktioniert. Was passiert, wenn dieser Code ausgeführt wird?
delay() ist asynchron, aber die Schleife ist nicht, so dass die Schleife vor der Verzögerung beendet und zeigt Ihnen das letzte Element im Array. Sie müssen eine Rückruffunktion verwenden –
Der Grund für das Erscheinen von "Nachrichten" ist, dass es das letzte Element ist, wenn die Schleife die Iteration über das Objekt beendet. Sie müssen eine andere Variable außerhalb der Schleife erstellen, um das Ganze zu speichern. –