- ベストアンサー
Jvasvriptのlengthで個数が取得できません
DBから条件にあったレコードを取得して一覧表示させ、各行頭にラジオボタンを表示させています。 Javascriptのlengthを使ってラジオボタンの個数を取得しているのですが、ラジオボタンが2個以上ある場合は正常に取得できますが1個しかない場合は「undefine」となり、個数が取得できません。 lengthプロパティは2個以上でしか有効にならないのか、又はこれを回避する書き方があるのか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
<input type="radio" name="rbt" value="A">A <input type="radio" name="rbt" value="B">B <input type="radio" name="rbt" value="C">C とかいうようにラジオボタンを書いているのだったら document.getElementsByName('rbt').length でラジオボタン(というより同じ名前のエレメント)の数が取れます。 ラジオボタンが1つでも大丈夫です。 どのようにソースを書いておられるかわからないので 推測ですが、lengthが2個以上でないと使えないというのは、 コレクションになるかならないかということだと思います。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>rbt自体を参照する場合に個数が一個だと配列が使えない getElementsByNameを使用する場合は、1コでも配列の形でアクセスできますよ。 例えば、 var radioButtons = document.getElementsByName('rbt'); とすれば、例えrbtが1個の場合でも alert(radioButtons[0].value); の様に配列としてアクセスできます。 状況を勘違いしてたらすみません
お礼
なるほど。 こういう書き方をすれば個数に関係なく対応できるんですね。 キレイにソースがまとまりました。 ありがとうございました!
- koutarou504
- ベストアンサー率44% (182/407)
ちょっと出掛ける前なので検証する時間がありませんが、 とりあえず、思いつく回避方法を。 ラジオボタン.length で個数を取得しているのなら、 var wk個数=0; if(ラジオボタン.length){wk個数=ラジオボタン.length; }else wk個数=1; 以上で回避できると思います。 (上記はラジオボタンが必ず1つ以上存在するという前提の処理です。 0の場合がある時はそれ以前にラジオボタンが存在するか別途判断する必要があります。) 検証していないので、あくまで私の記憶,知識だけですけれど 参考になれば幸いです。
お礼
今、そういう書き方で対処していたのですがもっと適切な書き方があるのかな…と思って質問しました。 やっぱり、1個はとれないんですね。なんでだろう~。
お礼
遅くなりました。 上の方法で取れました。ありがとうございます。 ただ、rbt自体を参照する場合に個数が一個だと配列が使えないので、やはり一個と複数個の場合で分岐は必要になるんですね。それはしょうがないか…。