単二電池

下記は普通に動きますが、ラジオボタンの内容をデータベースによって変更しているためボタンが1個だけの場合があります。その場合にもエラーにならない書き方についてアドバイスいただけないでしょうか。

<SCRIPT language=JavaScript>
function set( n ) {
for ( i = 0; i < document.main.shori.length; i++ ) {
if ( document.main.shori[i].checked ) {
shori_value = document.main.shori[i].value
}
}
alert(shori_value)
}
</SCRIPT>
<body onLoad="set(0);">
<FORM NAME=main>
<INPUT TYPE="RADIO" NAME="shori" VALUE="1" onClick="set(0);" CHECKED>1 
<INPUT TYPE="RADIO" NAME="shori" VALUE="2" onClick="set(1);">2
</form>

A 回答 (1件)

おはようございます。


スクリプトを、以下のようにしてみてはいかがでしょうか。

var shori_value;

function set( n ) {
if (document.main.shori.length){
for ( i = 0; i < document.main.shori.length; i++ ) {
if ( document.main.shori[i].checked ) {
shori_value = document.main.shori[i].value;
}
}
}
else {
if(document.main.shori.checked){
shori_value = document.main.shori.value;}
}
alert(shori_value)
}

上では、if(document.main.shori.length){}という条件で条件分岐を設定しています。 document.main.shori.lengthは、フォーム部品のラジオボタンが配列としてソートされている場合には真を返しますので、複数のラジオボタンが並んでいるときにはこれ以下の処理を実行します。 もし、ラジオボタンが一つしかない場合は、それは配列としてソートされないため、document.main.shori.lengthは未定義となり、偽を返すはずなので、そこでエラーを回避できると思います。
あとは、else文でラジオボタンが一つのケースで、そのラジオボタンがチェックされているかどうかと、チェックされている場合にそのvalue値を返す処理を別に用意してやれば良いのではないでしょうか。

参考になれば幸いです。 見当違いでしたらごめんなさい。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>document.main.shori.lengthは、フォーム部品のラジオボタンが配列としてソートされている場合には真を返しますので

上記丁寧な解説ありがとうございました。
自分で書いてはいても、コピー多用で、意味がわかっていない状態であることがよくわかりました。 (^^;

おかげ様で目的が達成できました。

お礼日時:2003/07/29 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!