0

データベースで満たされたチェックボックスがあり、結果として構造化されています。

<div class="all_checkbox">
 <div> 
   <input type="checkbox" id="<?php echo $data['id']; ?>" style="float:left;"name="option_<?php echo $data['id']; ?>" value="<?php echo $data['id']; ?>">  
  </div> 
  <div style="margin-left:24px;"> 
     <label for="<?php echo $data['id']; ?>" >
              <?php echo $data['cat_title']; ?>
     </label> 
 </div> 
</div>

チェックされたチェックボックスをテストしたい - Java script に次のコードがあります。

function add_cat(){
  for (i=1; i<55; i++)
  {
    if(document.getElementById(i).checked == true )
    { 
      alert(i);
    }   
  }
}

ループは 55 に達しません。forループは 6 で停止します。誰か理由を説明できますか?

4

4 に答える 4

1

http://www.w3schools.com/tags/att_standard_id.aspで ID の命名規則を確認してください。 先頭は文字にする必要があり、その後に文字、数字、ハイフン、アンダースコア、コロン、ピリオドを続けることができます。
また、ループを実行する前に、ドキュメントにすべての ID が存在するかどうかを確認してください。指定した範囲の ID が存在しない場合、次のようなエラーが発生
TypeError: document.getElementById(i) is null
し、その時点で実行が停止します。
それがあなたの場合の理由だと思います。

于 2012-09-14T09:50:52.880 に答える
1

for ループはその本体をi=1untilに対して実行しi=54、その後i55 にインクリメントして停止します。

ただし、ループ本体の一部のコードが例外をスローし、ループ (およびスクリプト全体) が停止する可能性があります。これはおそらく型エラーであり、要素が見つからないobject is null - can't access property場合にスローされます。document.getElementById(i)エラーコンソールを確認してください。それを避けるために、コードを次のように変更することができます

 var el = document.getElementById(i);
 if ( el && el.checked ) …
 // which is short for
 if ( el != null  && el.checked == true ) …

ところで、数字は有効な html 識別子ではありません。これによりコードが壊れることはありませんが、それでもその問題に対処する必要があります。

于 2012-09-14T09:50:54.370 に答える
1

私はフランス語が話せないので質問の意味がよくわかりませんが...

ID および NAME トークンは文字 ([A-Za-z]) で始まる必要があり、その後に任意の数の文字、数字 ([0-9])、ハイフン ("-")、アンダースコア ("_") を続けることができます、コロン (":")、およびピリオド (".")。

編集

ああ、それは今翻訳されています (それをしてくれた人に感謝します)。私はまだこれがあなたの問題だと思います。

于 2012-09-14T09:37:48.730 に答える
0

この FOR ループは、1 から 54 までの i 値でループします。

于 2012-09-14T09:40:28.633 に答える