• ベストアンサー

なぜエラー?

いつもコピペでjavascriptを活用しています。 (^^; 下記の2個のRADIOボタンのうち1個を削除するとエラーになります。なぜ? <script Language="JavaScript"> <!-- function set( n ) { document.main.Submit.value = document.main.shori[n].value; } // --> </script> <FORM name="main"> <INPUT TYPE="RADIO" NAME="shori" VALUE="修正" onClick="set(0);" CHECKED> 修正 <INPUT TYPE="RADIO" NAME="shori" VALUE="複写" onClick="set(1);"> 複写 <INPUT TYPE="SUBMIT" NAME="Submit" > </FORM>

質問者が選んだベストアンサー

  • ベストアンサー
  • s_doc
  • ベストアンサー率24% (93/377)
回答No.3

INPUTオブジェクトはタイプを区別しませんので、 同名でhiddenタイプのダミーを入れて常に2つ以上になるようにしてやると、 関数を改造せずに使えます。 <INPUT TYPE="hidden" NAME="shori" VALUE="">

s-holmes
質問者

お礼

回答ありがとうございました。 <INPUT TYPE="hidden" NAME="shori" VALUE=""> これを入れて、正常に動作しました。 コピペユーザーとしては、これをまず採用させていただきました、 (^^;

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

「ラジオボタンを1つにしてしまうと配列として処理できなくなる」というのは、No.1のPrynneさんの通りです。 ラジオボタンの項目数を変えることが頻繁にあるならば、JavaScriptの方まで変更するのは面倒ですよね。 このような場合は、ラジオボタンが複数でも単数でも処理できるようにJavaScriptを書いておくと便利です。 配列かどうかの判別は length プロパティがあるかどうかで分かりますので、次のように変更してください。 function set( n ) {   if (document.main.shori.length) {  // 配列時の処理     document.main.Submit.value = document.main.shori[n].value;   }   else {  // 単数時の処理     document.main.Submit.value = document.main.shori.value;   } } # コピーする場合は、全角スペースを半角スペースかタブに変換してください。

s-holmes
質問者

お礼

回答ありがとうございました。 >配列かどうかの判別は length プロパティがあるかどうかで分かりますので いろいろなサンプルで「length」が出てくる意味がやっと少し理解できました。 (^^;

noname#3345
noname#3345
回答No.1

ひとつになると配列にならなくなっちゃうからでしょう。 shoriという名前のradioボタンが複数あることにより、syori[n]という配列として扱えます。 document.main.Submit.value = document.main.shori[n].value; ここで、syori[n]と存在しない配列指定しているからエラーになるわけです。 document.main.Submit.value = document.main.shori.value; としてやれば、解決できます。

s-holmes
質問者

お礼

回答ありがとうございました。 >ひとつになると配列にならなくなっちゃうからでしょう。 「配列」という言葉が、プログラミングを知らない私には、今だに、ハードルが高い・・。 (^^;