« 2006/01の水槽 | Home | 長い腕 »

2006年1月23日

チェックボックスの個数が可変の時に対応する



チェックボックスの個数が可変の時に対応した

JavaScriptの制御を試していました。




// JavaScript部



var count = 0;

obj=document.form.check;

for (var i=0;i<obj.length ; i++){

  if(obj[i].checked){

    count+;

  }

}



window.alert(count + '件、選択されています。');



// HTML部



<input type="checkbox" name="check" value="北海道">

<input type="checkbox" name="check" value="東京">

<input type="checkbox" name="check" value="大阪">





この組み方だと、チェックボックスが2つ以上だと問題なく動くけど、



<input type="checkbox" name="check" value="北海道">



こんな感じでチェックボックスが1つだと配列にはならないので

obj[i].checked

のコードでNaNになってしまって、うまく動きませんでした。



結局

<input type="checkbox" name="check" value="北海道">

<input type="hidden" name="check" value="dummy">

こんな感じで非表示のダミーチェックボックスを挿入するようにして

チェックボックスが必ず2件以上の配列になる状態にして

正常動作するようにしたのですが、ちょっと力技のような気がします。



Webで調べてみましたが、これといった解決方法を見つけることができませんでした。

王道の組み方はどういった組み方なんだろう。



またよい組み方を見つけたらこのエントリーか別エントリーで

追記します。





ふといつもこの文章を書いているMovableTypeで同じ制御していた箇所が

あったと思い出して、JavaScript部を探してみたら、下のような処理でした。




var count = 0;

var obj = document.form.check;

if (!obj) return 0;

if (obj.type && obj.type == 'hidden') return 1;

if (obj.value && obj.checked){

  count++;

}

else{

  for (i=0; i<obj.length; i++)

    if (obj[i].checked) count++;

}

return count;





なるほど、「if (obj.value && obj.checked)」でチェックボックスが1件の時は分岐させているのか。

けっこうベタな組み方でした。

ちょっとしょんぼり。

コメント(5)

nameに連番ふっちゃう私はおバカさん(笑)
いくつチェックボックスがあるかサーブレット側からjspに渡すからだいじょーぶ!
(だいじょーぶじゃねぇ)

nameに連番ふってもいけそうだけど、あんまりみない組み方だよね。
なにかデメリットがあるのかな。ここらへんはikkanのほうが詳しそうー。

最近さわることの多いJavaもJavaScriptは先人の背中さえも見えない
ほど自分のレベルが低くて、新しいことを覚えるのは楽しいけれど危機感が(^-^;

んー、あなたにレベル低いっていわれたらあたしゃクズですよん♪
打ち合わせなし、仕様書なし、コーディングルールなし
「こんな感じで作って」っていわれたもん作ってますから~
だーかーらー仕事楽しくないのら

そうそう、O社の野田クンが社長復帰したみたいだよん
やっぱ創業者だねぇ

あー、固有名詞いやだったらコメント削除しといてください

テンション下がってますね。
そこら辺の話はじっくり聞きたいと思いつつ。

社長退任は知ってたんですがそうなんですか。
その会社については、仕事をがんばっている人達の
ことを考えると結構切なくなります。
ここらへんもぐだぐだと一緒に語りたいと思いつつ。

コメントする