【发布时间】:2016-08-10 00:25:09
【问题描述】:
如果我写html:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<h1 id="message">
</h1>
和JS:
messages = ["Here", "are", "some", "messages."]
$(function() {
for (var i = 0; i < messages.length; i++) {
$('#message').html(messages[i]).delay(1000);
}
});
并加载页面,我希望看到数组中的每个字符串显示之间都有延迟。但是,我看到的只是“消息”。出现。似乎 for 循环在执行任何延迟之前立即遍历数组中的每个值。
我已经看到了另一种获得所需视觉结果的方法 (How can I change text after time using jQuery?),但我想知道为什么早期的方法不起作用。执行此代码时发生了什么?
【问题讨论】:
-
delay() 是异步的,但循环不是,因此循环在延迟之前完成并显示数组中的最后一个元素。你需要使用回调函数
-
出现'messages'的原因是因为它是循环完成对对象的迭代时的最后一项。您需要在循环外创建另一个变量来保存整个内容。
标签: javascript jquery arrays