javascriptで質問です。

「全てなしにチェック」ボタンで、職員マスタより得た
全職員分のチェックボックスにチェックをつけようとしています。

職員データが複数ある場合は正常に機能するのですが、
1件の場合にはチェックがつきません。
どう修正すればよいでしょうか。
以下は本質問用に簡易化したコードです。

function chBxOn(){
for(i=0; i<document.f.elements['nashi[]'].length; i++) {
document.f.elements['nashi[]'][i].checked = true;
}
}
$sql="SELECT * FROM m_syokuin ";
$mysql->query($sql);
while($row = $mysql->fetch()){
$syokuin_id=$row[syokuin_id];
$syokuin_name=$row[syokuin_name];
echo <<<EOT
<input type="checkbox" name="nashi[]" value=$syokuin_id>なし
<input type="checkbox" name="ari[]" value=$syokuin_id>あり
EOT;
}
<input type="button" value="全てなしにチェック" onclick="javascript:chBxOn();">

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/05/12 14:48:26
  • 終了:2011/05/13 08:20:25

ベストアンサー

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/05/12 15:17:10

ポイント27pt

1つだけの場合は集合として扱われないのでlengthそのものが存在しないというのが原因です

 

対処例

function chBxOn(){
    if (document.f.elements['nashi[]'].length == null) {
        document.f.elements['nashi[]'].checked = true;
    } else {
        for(i=0; i<document.f.elements['nashi[]'].length; i++) {
            document.f.elements['nashi[]'][i].checked = true;
        }
    }
}

余談ですけど、

有り無しならチェックボックスよりもラジオボタンのほうが適しているのでは?

id:kentaro_jpn

ありがとうございます。

実際は「あり」「なし」以外の選択肢もあるため、チェックボックスを使っています。

提示していただいた対処例そのまま使わせていただきます。

2011/05/13 08:19:24

その他の回答(2件)

id:Banias No.1

Banias回答回数237ベストアンサー獲得回数192011/05/12 15:05:52

ポイント27pt

ご質問のコードはJavaScriptとPHPが混在していると考えてよろしいでしょうか?


下記のように変更してみてください。

function chBxOn(){
  for(i=0; i<document.f.elements['nashi'].length; i++) {
    document.f.elements['nashi'][i].checked = true;
  }
}
$sql="SELECT * FROM m_syokuin";
$mysql->query($sql);
$i = 0;
while($row = $mysql->fetch()){
  $syokuin_id=$row[syokuin_id];
  $syokuin_name=$row[syokuin_name];
  echo <<<EOT
<input type="checkbox" name="nashi[{$i}]" value=$syokuin_id>なし
<input type="checkbox" name="ari[{$i}]" value=$syokuin_id>あり
EOT;
  $i++;
}
<input type="button" value="全てなしにチェック" onclick="javascript:chBxOn();"> 
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492011/05/12 15:17:10ここでベストアンサー

ポイント27pt

1つだけの場合は集合として扱われないのでlengthそのものが存在しないというのが原因です

 

対処例

function chBxOn(){
    if (document.f.elements['nashi[]'].length == null) {
        document.f.elements['nashi[]'].checked = true;
    } else {
        for(i=0; i<document.f.elements['nashi[]'].length; i++) {
            document.f.elements['nashi[]'][i].checked = true;
        }
    }
}

余談ですけど、

有り無しならチェックボックスよりもラジオボタンのほうが適しているのでは?

id:kentaro_jpn

ありがとうございます。

実際は「あり」「なし」以外の選択肢もあるため、チェックボックスを使っています。

提示していただいた対処例そのまま使わせていただきます。

2011/05/13 08:19:24
id:nattow No.3

nattow回答回数102ベストアンサー獲得回数272011/05/12 15:57:03

ポイント26pt

要素が複数あるときは document.f.elements['nashi'] を要素の入った配列として扱えるので、質問文にあるコードでいいのですが、一つしかない場合は document.f.elements['nashi'] が要素そのものを指す(配列ではない)ので、document.f.elements['nashi[]'][i] のように添え字をつけたアクセスができなくなります。

配列かどうかをチェックして場合分けが必要です。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません