我有下一个问题:arr只有两个元素。下一个循环试图执行他的身体3次:
var selectHTML = "";
for (var i = 0; i< arr.length; i++) {
selectHTML += '<option value="' + arr[i].id + '">' + arr[i].name + '</option>';
}
下一个循环试图按照我的预期执行他的身体2次:
var selectHTML = "";
for (var i = 0; i< arr.length; i++) {
alert(i);
selectHTML += '<option value="' + arr[i].id + '">' + arr[i].name + '</option>';
}
为什么(在Firefox 14.0.1中测试过)?
更新:抱歉计数器增加后的分号,这是一个错字。但是如果没有它,代码仍然无效。
更新:好的,这段代码已经简化了。整个代码本身:
var selectHTML = "";
timeSheet.steps = [ { name:"Leave as is", id:-1}, { name:"Approved", id:2} ];
for (var counter = 0; counter < timeSheet.steps.length; counter++) {
selectHTML += '<option value="' + timeSheet.steps[counter].id + '">' + timeSheet.steps[counter].name + '</option>';
}
在Firebug中,我可以看到timeSheet.steps.length等于2.顺便说一下,我没有添加“alert(i)”,而是添加了注释,并且正文执行了2次。魔法...
答案 0 :(得分:0)
循环中有一个额外的分号
for (var i = 0; i< arr.length; i++;) {
不用尝试:
for (var i = 0; i< arr.length; i++) {
这适用于我(在Firefox 14.0.1中测试):
var arr = [{id:1, name: 'test2'}, {id:2, name: 'test2'}];
var selectHTML = "";
for (var i = 0; i< arr.length; i++) {
selectHTML += '<option value="' + arr[i].id + '">' + arr[i].name + '</option>';
}
console.log(selectHTML);
var selectHTML = "";
for (var i = 0; i< arr.length; i++) {
selectHTML += '<option value="' + arr[i].id + '">' + arr[i].name + '</option>';
}
console.log(selectHTML);
返回
<option value="1">test2</option><option value="2">test2</option>
<option value="1">test2</option><option value="2">test2</option>
答案 1 :(得分:0)
请详细说明你的身体跑三次的意思。如果您的数组仅包含2个元素,则i == 2
时,arr[i]
为undefined
,因此访问id
和name
会引发错误。
如果发生了这种情况,那么在循环中的某个时刻,正在修改数组的长度,使用/不添加元素。
通过添加alert
修复的问题通常是时间问题。请参阅Alerts
警报框(以及相关的确认和提示框)有一些 奇怪的属性。
它们是启动的脚本意义上的同步 对话框暂停,直到对话框关闭。脚本等待 alert() - 在继续之前返回的函数。
棘手的部分是某些浏览器允许调度事件 对话框可见并等待某些用户操作。这个 表示暂停一个脚本时,等待警报 函数返回,另一个函数可能作为一部分执行 不同的事件派遣。
用户界面事件(如mouseup和click)在播放期间不会触发 警报,因为警报是模态的并且捕获所有用户输入,但是 非用户启动的事件,如页面加载,超时处理程序和 异步XMLHttpRequest返回处理程序,可能会触发。
您尚未显示修改arr
变量的代码。有可能你在修改arr
的地方有一个ajax调用。在第一个代码示例中没有警报,因此可能在ajax成功处理程序触发之前整个for循环结束。在第二个示例中,警报会阻止for循环执行,直到您丢弃警报。在你丢弃它的时候,ajax成功处理程序必须被解雇。
请分享修改arr
变量的所有相关代码。