我在查明价值是否缺失方面遇到了一些问题。
我的屏幕上有以下选择框:
<select id="user_list" onclick="load_user(this)" name="user_list" size="21" style="width:200px;">
<option value="1">Item1</option>
<option value="2">Item2</option>
<option value="4">Item4</option>
</select>
我使用以下JavaScript:
var userList = document.getElementById("user_list");
for (var i=0;i<userList.options.length; i++) {
if (userList.options[i].value != (i+1)) {
alert((i+1)+" is missing");
break;
}
else
{
alert((userList.options.length+1)+" is missing");
break;
}
}
我面临的问题是,如果选项值1,2,3,4有回复5(因为这是下一个数字),这很好,因为这就是我想要的。
如果我删除选项3(就像在我上面的选择框中一样),当它应该说3缺少时,它会继续以4回复。
如果我删除以下代码:
else
{
alert((userList.options.length+1)+" is missing");
break;
}
它完成了我想要它做的事情,但在检查所有值后它没有得到下一个值编号(所以它在读取列表中的最后一个选项后停止)。
它应该做的是通过选择框中的所有选项,如果缺少其中一个值,它应该是缺少的那个。如果所有的值都在那里,那么它应该是下一个缺少的可用选项。
谁能看到我做错了什么?
答案 0 :(得分:0)
它一直告诉您4
缺失,因为您在循环的每次迭代中运行else
代码(直到找到丢失的代码)。 else
中的代码只能运行一次。您可以使用标志变量来设置是否缺少一个并在循环后检查。尝试将js代码更改为
var allFound = true;
var userList = document.getElementById("user_list");
for (var i=0;i<userList.options.length; i++) {
if (userList.options[i].value != (i+1)) {
alert((i+1)+" is missing");
allFound = false;
break;
}
}
if(allFound)
alert((userList.options.length+1)+" is missing");
答案 1 :(得分:0)
这适用于Jsfiddle http://jsfiddle.net/Vt2DJ/
var userList = document.getElementById("user_list");
var whileindex = 0; //keeps track of the number of options checked
var i = 0; //values that should be available for the options
while ( whileindex < userList.options.length )
{
if (userList.options[i].value != (i+1)) {
alert((i+1)+" is missing");
i++; //this because otherwise we have a wrong offset for the check
}
else
{
whileindex++; //option exists
}
i++; //go on to the next value
}