JavaScriptでcheckboxの値を取得する時に、propatiesエラーが出るんですが・・・

[上に] [前に] [次に]
とこ 1998/05/08(金) 13:20:54
はじめまして。よろしくお願いいたします。

JavaScriptでcheckboxのvalueを取得するプログラムを作ってみました。
----------------------------------------------------------------------
<HTML>
<HEAD>

<SCRIPT language="JavaScript">
var TestValue="";
function checktest() {
for (i=0;i<2;i++) {
if (document.forms[0].test[i].checked == true) {
TestValue += document.forms[0].test[i].value;
}
}
window.alert(TestValue);
}
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<input type="checkbox" name="test" value="test1">test1<br>
<input type="checkbox" name="test" value="test2">test2<br>
<input type="button" value="test" onclick="checktest()">
</FORM>
</BODY>
</HTML>
----------------------------------------------------------------------

この時、checkboxが2個以上あれば何も問題なく動いてくれるのですが、
checkboxが1つの時(for (i=0;i<1;i++)の時に)、
「document.forms[0].test[i] has no properties.」と言われてしまいます。
ただ、for (i=0;i<1;i++)でも、checkboxが2個以上あれば問題なく動くんです。

なぜでしょう?なぜかしら?

omi [E-Mail] 1998/05/08(金) 22:59:04
動かない原因は、不明ですが、
test[i] を elements[i]に替えると動かないでしょうか。

いいづか [E-Mail] [HomePage] 1998/05/10(日) 03:04:38
チェックボックス test が2つ以上ある場合は配列として扱えますが、
ひとつしかない場合は配列にはなりません。そのため、

  if (document.forms[0].test.checked == true) {

というような構文にする必要があります。

「CGIなどがチェックボックスを生成するので、1つかもしれないし
2つ以上かもしれない」場合のコーディングをしてみました。
よろしければご参考まで。なお、ネストを表現するため、
タブの代わりに全角スペースを使っています。貼り付けてテスト
するときは、全角スペースはタブかスペースにしてくださいね。

------------------------------------------------------------
<HTML>
<HEAD>

<SCRIPT language="JavaScript">
<!--///////////// checklist() 修正版 //////////////////////////
function checktest() {
  TestValue="";

  // フォーム f の全エレメントを対象として検証を行う。
  // エレメントの数は不定なので、定数ではなくelements.length
  // を使用したほうがいいと思う。

  for (i = 0; i < document.f.elements.length; i++ ) {

    // エレメントがチェックボックスの時に処理を行う。
    if (document.f.elements[i].type == "checkbox" ) {

      // チェックボックスがONの時はその値を設定する。
      if (document.f.elements[i].checked == true) {
        TestValue += document.f.elements[i].value;
      }
    }
  }
  document.f.result.value = TestValue;  // 設定結果の表示
}
//-->
</SCRIPT>
</HEAD>
<BODY>

<!--問題のフォーム -->
<FORM name=f><!-- フォームには名前を付けたほうがいいです。 -->

<!--------チェックボックスを増減してみてください。------------>
<!--------JavaScriptの変更は不要です。------------------------>
<input type="checkbox" name="test" value="test1">test1
<input type="checkbox" name="test" value="test2">test2
<!--------ここまでですよ-------------------------------------->

<P>結果表示エリア:<input type="text" name="result"></P>
<input type="button" value="test" onclick="checktest()">
</FORM>
</BODY>
</HTML>

とこ 1998/05/11(月) 09:34:04
[[解決]]
omiさん、いいづかさん、ありがとうございました
ばっちし動きましたです!!

>チェックボックス test が2つ以上ある場合は配列として扱えますが、
>ひとつしかない場合は配列にはなりません。
とは、知らなかったです。
勉強不足ですね、、、。

ありがとうございました。
今後ともよろしくお願いいたします。

[上に] [前に] [次に]