- ベストアンサー
CHECKBOXとTEXTBOXのnameが同じ場合
下記のようにチェックボックス名とテキストボックス名が同じ場合、エラーになりますが、これをjavascriptのみでうまく処理できる方法はないでしょうか。 #nameは同じまま。 #cgiを経由せず。 #下記と同じことをやりたいわけではありません。単に簡単にしたサンプルです。 <form name="main"> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="東京">東京<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="大阪">大阪<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="その他" onclick="document.main.address.value = 'その他だよ'">その他<BR> <INPUT TYPE="text" NAME="address" SIZE="20"> </form>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
名前がかぶってしまう場合は名前からデータを参照できなくなります。 番号から取得しましょう。 s-holmesさんがどのくらいの理解力と知識があるのかわからないためSAMPLEだけで理解できなければすみません。 (逆にSAMPLEなんて馬鹿にするなと思われたらすみません。) SAMPLE動作確認 IE5/WIN2K SAMPLE使用・・・ 変更,使用,配布,商用等全許可。 著者完全免責。 以下SAMPLE/ <html> <head> <script language="JavaScript"> <!-- function PROGRAM_0(FORM,NAME){ var Str = ""; var Arrangement=GetElementsPosition(FORM,NAME) var OtherChecking = 0; //---------------------------------------------- //CHECKBOX に対する処理 for(i=0;i<Arrangement.length;i++){ if(document.forms[FORM].elements[Arrangement[i]].type=="checkbox"){ if(document.forms[FORM].elements[Arrangement[i]].checked==true){ if(document.forms[FORM].elements[Arrangement[i]].value!="その他"){ Str += document.forms[FORM].elements[Arrangement[i]].value + "/"; }else{ OtherChecking = 1; } } } } //---------------------------------------------- //TEXT に対する処理 if(OtherChecking==1){ for(i=0;i<Arrangement.length;i++){ if(document.forms[FORM].elements[Arrangement[i]].type=="text"){ if(document.forms[FORM].elements[Arrangement[i]].value!=""){ Str = document.forms[FORM].elements[Arrangement[i]].value + "/"; }else{ alert('その他を選択した場合は入力エリアに値を入力してください'); return 0; } } } } //---------------------------------------------- //なぜ処理を分けているか //番号で行う場合上から順に行われるため //汎用性を持たせるには処理を分ける //---------------------------------------------- alert(Str); //---------------------------------------------- } // PROGRAM_SAMPLE : GetElementsPosition // フォーム名,エレメント名を元にその位置を取得します // RETURN 値 : 配列方変数 (位置ナンバー) // (c)SHORN FONDA **AD2002** function GetElementsPosition(FORM,NAME){ var Arrangement = new Array(); k = 0; for(i=0;i<document.forms[FORM].elements.length;i++){ if(document.forms[FORM].elements[i].name==NAME){ Arrangement[k]=i; k++; } } return Arrangement; } //--> </script> </head> <body bgcolor="#ffffff"> <form name="main"> <INPUT TYPE="CHECKBOX" NAME="add" VALUE="東京">偽者<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="東京">東京<BR> <INPUT TYPE="CHECKBOX" NAME="add" VALUE="東京">偽者<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="大阪">大阪<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="その他" onclick="document.main.address.value = 'その他だよ'">その他<BR> <INPUT TYPE="text" NAME="address" SIZE="20"> <input type=button value=start onClick="PROGRAM_0('main','address')"> </form> </form> </body> </html>
その他の回答 (2)
こんにちは。 nameを取得する際に、TYPE取得もしたらどうですか? その場合、<HEAD></HEAD>タグ内か、外部JSにJavaScript書かなくてはなりませんが。 <html> <head> <title>test</title> <script language="javascript"> <!-- function CheckBX(t){ var t_val = t.value; for(i=0; i<document.main.address.length; i++) if (document.main.address[i].type != "checkbox"){ document.main.address[i].value = t.value;} } //--> </script> </head> <body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0"> <form name="main"> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="東京">東京<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="大阪">大阪<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="その他" onclick="CheckBX(this);">その他<BR> <INPUT TYPE="text" NAME="address" SIZE="20"> </form> </body> </html> どでしょ?
- loveobo
- ベストアンサー率48% (102/210)
nameを共通にと仰るのは、選択肢のうちひとつだけ(その他ならtextbox)の値を 取得する意図でしょうか? 当方初心者につき、#1のご回答とは比較にならない いいかげんなスクリプトです。はずしていたらご容赦ください。 <html><head> <script language="JavaScript"><!-- function f() { for(i=0; i<document.main.address.length; i++){ if (document.main.address[i].checked){ alert(document.main.address[i].value); return;} } } //--> </script></head> <body><form name="main"> <input type="radio" name="address" value="東京">東京<br> <input type="radio" name="address" value="大阪">大阪<br> <input type="radio" name="address" value="" onClick="this.value=document.main.address[3].value">その他 <input type="text" name="address" size="20" onBlur="document.main.address[2].value=this.value"> <input type="button" value="テスト" onClick="f()"> </form></body></html>