- ベストアンサー
ラジオボタンでreadonlyの切替え
ラジオボタンでreadonlyの切替えをしたいのですが、どうもうまくいきません。ラジオボタンの値の拾い方でつまづいているようです。 <script Language="JavaScript"> <!-- function set( n ) { document.main.Submit.value = document.main.elements[n].value; document.main.Submit.style.backgroundColor = document.main.elements[n].style.backgroundColor; document.main.年月日.value = 'やっほ'; document.main.年月日.style.background = 'white'; if (document.main.shori.value = '複写'){ document.main.年月日.readOnly = ''; alert(document.main.shori.value); } else if (document.main.shori.value = '修正'){ alert(document.main.shori.value); document.main.年月日.readOnly = ture;} } // --> </script> <FORM NAME=main ACTION="★" METHOD="POST"> <INPUT TYPE="RADIO" NAME="shori" VALUE="修正" CHECKED onClick="set(0);">修正 <INPUT TYPE="Radio" NAME="shori" VALUE="複写" onClick="set(1);">複写<BR> <INPUT TYPE="text" NAME="年月日" SIZE="20" VALUE="" readonly style="background-color : #FFCCCC;" style="ime-mode: inactive"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信"></form>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
まず、#1の方も指摘されていますが、フォーム部品の名前に全角文字は使わないようにした方が良いですね。 エラーの原因になることが多々あります。 それで、ラジオボタンの利用法ですが、ラジオボタンがチェックされているかどうかを拾う必要があると思いますよ。 document.フォーム名.ラジオボタン名[x].checkedというプロパティが真であるかどうかをチェックしないといけないでしょう。 特定のラジオボタンがチェックされているかどうかを拾うには、ラジオボタンはJavaScriptでは配列として管理されていますので、そのフォーム名とラジオボタン名に加えて、配列の番号を付記して行います。 ラジオボタンを拾って動作をチェックする部分のスクリプトを、以下のようにしてみてはいかがでしょうか。 if (document.main.shori[1].checked){ document.main.dated.readOnly= false ; alert(document.main.shori[1].value); } else if (document.main.shori[0].checked){ alert(document.main.shori[0].value); document.main.dated.readOnly= true ;} 多分これでうまく動いてくれると思います。 なお、readOnly属性の操作で、書込み禁止を解除する場合には、値なしを引き渡すよりもfalseを渡した方が確実ですよ。 ラジオボタンの扱いは、他のタイプのものとはちょっと違うので、慣れが必要ですね(私も先日こちらの回答で、ラジオボタンの扱いについて間違ったことを書いてしまいました…)。 参考になれば幸いです。 見当違いでしたら、ごめんなさい。
その他の回答 (2)
- mousengoke
- ベストアンサー率50% (197/388)
>ラジオボタンの値の拾い方でつまづいているようです。 上記の通りだ何故かラジオボタンをクリックした時に関数を呼び出ししかも何故かそれぞれのラジオボタンに特有の引数を入れてるのでそれを利用すればわざわざdocumentを使わなくても場合わけで切るのでは? if(n==0){ 修正のラジオボタンを押した時の処理 }else if(n==1){ 複写のラジオボタンを押した時の処理 } if(n==1)は省略しても大丈夫なはずですが一応入れておきました。
お礼
回答ありがとうございました。 >わざわざdocumentを使わなくても場合わけで切るのでは? 確かに、提示した中身だけだとそのとおりなのですが、員数の部分を今後なしにするつもりなので今回の質問になってしまいました。
- abcdef1234567890
- ベストアンサー率19% (7/36)
とりあえず フォームの名前は全角文字は使わないように。 とりあえず、何をしようとしているのでしょうか? document.main.年月日.value = 'やっほ'; document.main.年月日.style.background = 'white'; はif文の外にありますが(つまり関数が呼び出されるたびに動作しますが)それでいいのでしょうか? あと document.main.Submit.style.backgroundColor = document.main.elements[n].style.backgroundColor; は何をしようとしているのでしょうか?
お礼
回答ありがとうございました。 >はif文の外にありますが(つまり関数が呼び出されるたびに動作しますが)それでいいのでしょうか? すみません。この部分はやりたいことと直接には関係ない部分でした。 >document.main.Submit.style.backgroundColor = document.main.elements[n].style.backgroundColor; は何をしようとしているのでしょうか? ここも同様でした。 (^^; よけいな部分が多すぎる質問でした。
お礼
回答ありがとうございました。 アドバイスのとおりで動きました。 >ラジオボタンがチェックされているかどうかを拾う必要があると思いますよ。 この点があいまいなままでやっていました。どうも動きが違うと繰り返していたらこのせいなのですね。