我试图在javascript中测试计时功能,让它循环通过一个字符串数组并在3秒延迟后显示每个,但是当我调用该函数时,它会做一个奇怪的模式,只取第一个字母的第一个字母字符串,然后第二个字符串的第二个字母,依此类推......如果,数组中的第四个项目没有第四个字母,则打印未定义。请帮忙。 感谢
function myFunc () {
setTimeout(function () {
var contacts = {
addressBook : [
{
'name' : 'Jane',
'email' : 'JaneDoegmail.com'
},
{
'name' : 'Meggie',
'email' : 'meggiegmail.com'
},
{
'name' : 'John',
'email' : 'johnDoegmail.com'
},
{
'name' : 'Paul',
'email' : 'paulgmail.com'
},
{
'name' : 'Bo',
'email' : 'bogmail.com'
}
]
};
var object = contacts.addressBook;
var i;
for (var i = 0; i < object.length; i++) {
var item = object[i];
var name = item.name;
var email = item.email;
document.write(name[i]);
};
if (i < 10) {
myFunc();
};
}, 3000)
}
myFunc();
答案 0 :(得分:2)
基本上,你的输出是正确的,它告诉你要做的事情,它会显示你在名字字符串索引处的字符。您应该使用(name)
代替(name[i])
。
但是,我认为这是您可能会追求的: suggested improvement demo
基本上,它允许循环由一个计数器进行外部控制,该计数器将在调用时递增,并在显示所有联系地址后停止。
JS:
var c = document.getElementById("console");
var contacts = {
addressBook : [
{
'name' : 'Jane',
'email' : 'JaneDoegmail.com'
},
{
'name' : 'Meggie',
'email' : 'meggiegmail.com'
},
{
'name' : 'John',
'email' : 'johnDoegmail.com'
},
{
'name' : 'Paul',
'email' : 'paulgmail.com'
},
{
'name' : 'Bo',
'email' : 'bogmail.com'
}
]
};
var i = 0;
(function myFunc () {
var item = contacts.addressBook[i++];
var name = item.name;
var email = item.email;
c.innerHTML += name +", " + email + "<br>";
if (i < contacts.addressBook.length) {
setTimeout(myFunc,3000);
}
})()
答案 1 :(得分:1)
而不是document.write(name[i]);
,请document.write(name);
答案 2 :(得分:0)
您的document.write(name[i]);
应该是
document.write(name);
由于
答案 3 :(得分:0)
检查出来:
myFunc();
function myFunc () {
setTimeout(function () {
var contacts = {
addressBook : [
{
'name' : 'Jane',
'email' : 'JaneDoegmail.com'
},
{
'name' : 'Meggie',
'email' : 'meggiegmail.com'
},
{
'name' : 'John',
'email' : 'johnDoegmail.com'
},
{
'name' : 'Paul',
'email' : 'paulgmail.com'
},
{
'name' : 'Bo',
'email' : 'bogmail.com'
}
]
};
var object = contacts.addressBook;
var i;
for (var i = 0; i < object.length; i++) {
var item = object[i];
var name = item.name;
var email = item.email;
document.write(name+" --> ");
};
if (i < 10) {
myFunc();
};
}, 3000)}