0

値が欠落しているかどうかを確認するのに問題があります。

画面に次の選択ボックスがあります。

<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;
}

それは私がやりたいことをしますが、すべての値をチェックした後、次の値の番号を取得しません(したがって、リストの最後のオプションを読み取った後に停止します)。

選択ボックスのすべてのオプションを確認し、値の1つが欠落している場合は、欠落している値を警告する必要があります。すべての値の数値がそこにある場合は、不足している次の利用可能なオプションを警告する必要があります。

誰かが私が間違っていることを見ることができますか?

4

2 に答える 2

0

4ループのすべての反復でコードを実行しているため(欠落しているelseコードが見つかるまで)、欠落していることを通知し続けます。のコードelseは1回だけ実行する必要があります。フラグ変数を使用して、フラグ変数が欠落しているかどうかを設定し、ループの後で確認できます。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");
于 2012-06-20T01:03:14.243 に答える
0

これはJfiddlehttp://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
}
于 2012-06-20T01:20:07.877 に答える