• ベストアンサー

解決法をご教示下さい。

function Service_selectChange(f){ var selectedNum=document.form.Q4.selectedIndex; var len = f.elements.length; if(selectedNum == 0) { for(i=0;i<len;i++){ if(f.elements[i].className=="1Txt"){ f.elements[i].disabled=false; } if(f.elements[i].className=="2Txt" | f.elements[i].className=="3Txt"){ f.elements[i].disabled=true; f.elements[i].value=""; } if(f.elements[i].className=="2Radio1" | f.elements[i].className=="3Radio1"){ f.elements[i].disabled=true; f.elements[i].checked=false; } if(f.elements[i].className=="2Radio2" | f.elements[i].className=="3Radio2"){ f.elements[i].disabled=true; f.elements[i].checked=true; } if(f.elements[i].className=="2Select" | f.elements[i].className=="2Select"){ f.elements[i].disabled=true; f.elements[i].selectedIndex = 0; } } } 上記ソースでelementはNullまたはオブジェクトではありませんとエラーが出てしまいますが、 その原因を突き止めることが出来ません。 解決法をご教示下さい。よろしくお願い致します。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

#3です。 すみません、ソースを見た限り何をしたいのかよくわかりません。 まずプルダウンQ4で選んだ数だけ下のテキストボックスが 有効になる・・・ということでよろしいですか? その下のラジオボタンは何をしたいのでしょうか? またさらにその下のプルダウンもどういう根拠で、使用制限 するのかがわかりません。 どういう場合、どうなるという仕様をもっと明確になさるほうが 回答者も混乱がないかと。 とりあえず、プルダウンによるテキストボックス制限のソース だけ書いときます。元ソースにはなかったですが、テキスト ボックスの2番目と3番目にはdisabledを最初からつけて おいたほうがよいでしょう。 あとformの名前にformとするのはよくありません。 最低でもform1とか適当な序数をふってください。 (今回は名前なしとしておきました) <SCRIPT language="JavaScript"> function Service_selectChange(obj){ var selectedNum=obj.selectedIndex; var f=obj.form var flg_1Txt=0; for(i=0;i<f.length;i++){ if(f[i].className=="1Txt"){ var flg=selectedNum<flg_1Txt++; f[i].disabled=flg; if(flg) f[i].value=""; } } } </script> <form> <select name="Q4" onchange="Service_selectChange(this)"> <option value="1" selected >1</option> <option value="2" >2</option> <option value="3" >3</option> </select><BR> <input type="text" class="1Txt" name="Q5" size="30"/><BR> <input type="text" class="1Txt" name="Q6" size="30" disabled><BR> <input type="text" class="1Txt" name="Q7" size="30" disabled/><BR> </form>

t_t1112
質問者

補足

説明が雑で申し訳ありませんでした。 Q4の選択項目によって回答してもらう項目を変えるアンケートを作成したいと考えています。 また、対象の項目以外にデータが入っていて欲しくないため、Q4を変えたときにデフォルトに戻しています。 よろしくお願い致します。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

つっこみどころ var selectedNum=document.form.Q4.selectedIndex; としてますがこれはfはdocument.formをうけるんじゃ ないのですか?であれば var selectedNum=f.Q4.selectedIndex; でよいでしょう。 また、f.elements.lengthはf.lengthでいいような 気がします。 フローも非効率な気がしますので、文字制限の絡み がないフォロー文にて全体のソースを書いてみて ください

t_t1112
質問者

補足

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <SCRIPT language="JavaScript"><!-- function nullCheck(){ reqd_err=0; if (reqd_err){;}else{ document.forms["formGeneratorForm"].submit(); } } function Service_selectChange(f){ var selectedNum=document.form.Q4.selectedIndex; var len = f.elements.length; if(selectedNum == 0) { for(i=0;i<len;i++){ if(f.elements[i].className=="1Txt"){ f.elements[i].disabled=false; } if(f.elements[i].className=="2Txt" | f.elements[i].className=="3Txt"){ f.elements[i].disabled=true; f.elements[i].value=""; } if(f.elements[i].className=="2Radio1" | f.elements[i].className=="3Radio1"){ f.elements[i].disabled=true; f.elements[i].checked=false; } if(f.elements[i].className=="2Radio2" | f.elements[i].className=="3Radio2"){ f.elements[i].disabled=true; f.elements[i].checked=true; } if(f.elements[i].className=="2Select" | f.elements[i].className=="3Select"){ f.elements[i].disabled=true; f.elements[i].selectedIndex = 0; } } } } // --></script> <form name="form"> <select name="Q4" onchange="Service_selectChange(this.form)"> <option value="1" selected >1</option> <option value="2" >2</option> <option value="3" >3</option> </select><BR> <input type="text" class="1Txt" name="Q5" size="30"/><BR> <input type="text" class="2Txt" name="Q6" size="30"/><BR> <input type="text" class="3Txt" name="Q7" size="30"/><BR> <input type="radio" class="2Radio1" name="Q8" value="1" disabled />要 <INPUT type="radio" class="2Radio2" name="Q8" value="2" checked disabled/>不要<BR> <input type="radio" class="3Radio1" name="Q9" value="1" disabled />要 <INPUT type="radio" class="3Radio2" name="Q9" value="2" checked disabled/>不要<BR> <select class="2Select" name="Q10"> <option value="1" selected >1</option> <option value="2" >2</option> <option value="3" >3</option> </select><BR> <select class="3Select" name="Q11"> <option value="1" selected >1</option> <option value="2" >2</option> <option value="3" >3</option> </select><BR> <INPUT TYPE="button" NAME="submit_button" VALUE="決定" ONCLICK="nullCheck()"> <INPUT TYPE="reset"><BR> </FORM> お返事が遅くなり申し訳ありません。 ご指摘の点を修正しました。 全体のソースは上記のとおりとなります。 フローについてのご指摘を頂けたら幸いです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

上記ソース中にelement は、でてきません。 elements でエラーがでるなら、 f が思ったようにフォームオブジェクトになっていないんじゃないかと思います。 あと、 var selectedNum=document.form.Q4.selectedIndex; のスペースが全角スペースになっています。

t_t1112
質問者

お礼

お礼が遅くなり申し訳ありません。 おっしゃるとおり、フォームの方でエラーを誘発しておりました。 ご指摘ありがとうございました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

formの構成と、この関数がどのような記述で呼ばれているかわから ないため、適切な指摘はできませんが、1点だけ指摘します。 if文は、 if (条件A || 条件B){ } が正しい記述です。

t_t1112
質問者

お礼

お礼が遅くなり申し訳ありません。 今後気をつけて作成致します。 ご指摘ありがとうございました。

関連するQ&A

  • java script フォームのチェックボックス入力制限について

    java script フォームのチェックボックス入力制限について どなたかお教えください。 以下のコードを書き換えて、現状では1つのチェックボックスを複数にし(かつ、複数選択可にし)、チェックボックスをチェックした場合のみ「選択肢」ラジオボタンがアクティブになる仕様にしたいと考えております。 サイト上で見つけたサンプルコードをいじっているのですが、何分素人なのでうまく行きません。どなたか助けていただけると助かります。 よろしくお願いします。 <script type="text/javascript"> function fchk3(obj){ var frm=obj.form; var len=frm.elements.length; if(obj.checked==true){ for(var i=0; i<len; i++){ if(frm.elements[i].type=="radio"){ frm.elements[i].disabled=false; } } }else{ for(var i=0; i<len; i++){ if(frm.elements[i].type=="radio"){ frm.elements[i].checked=false; frm.elements[i].disabled=true; } } } } </script> <form name="form3" action="#"> <label for="chk3"><input type="checkbox" id="chk3" name="chk3" onclick="fchk3(this)" checked="checked" />このボタンのチェックを外すとラジオボタンが無効化</label><br /> <label for="chk3_r1"><input type="radio" id="chk3_r1" name="r1" />選択肢</label> </form>

  • (続)ラジオボタンの選択でチェックボックスのON/OFFを連動

    前回(http://okwave.jp/qa5476132.html)とは全く違うものを参考に作成してみましたが、「ラジオボタンを選択するたびにチェックボックスのチェックが初期化される」というのがまだ出来ておりません。 どなたか教えていただけるとありがたいです>< <html> <head> <script language="javascript"> function classDisable(f,cn,fl){ for (var i=0;i<f.elements.length;i++){ if(f.elements[i].className==cn){f.elements[i].disabled=fl} } } function classCheck(f,cn){ for (var i=0;i<f.elements.length;i++){ if(f.elements[i].className==cn && f.elements[i].checked==true && f.elements[i].disabled==false){return true;} } return false; } </script> </head> <body> <form> ■分類<br> <input type="radio" value="アリ" name="fpcdata" class="fpcdata" onClick="classDisable(this.form,'Kind01',!this.checked);classDisable(this.form,'nofruit',classCheck(this.form,'Kind01'));">アリ ( <input type="checkbox" value="DXF" name="Kind01[]" class="Kind01" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">DXF <input type="checkbox" value="ガーバ" name="Kind01[]" class="Kind01" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">ガーバ <input type="checkbox" value="PDF" name="Kind01[]" class="Kind01" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">PDF ) <input type="radio" value="ナシ" name="fpcdata" class="fpcdata" onClick="classDisable(this.form,'Kind01',this.checked);classDisable(this.form,'nofruit',classCheck(this.form,'Kind01'));" checked>ナシ <input type="radio" value="相談" name="fpcdata" class="fpcdata" onClick="classDisable(this.form,'Kind01',this.checked);classDisable(this.form,'nofruit',classCheck(this.form,'Kind01'));"> 相談  ■分類<br> <input type="radio" value="ナシ" name="print" class="print" onClick="classDisable(this.form,'Kind04',this.checked);classDisable(this.form,'nofruit',classCheck(this.form,'Kind04'));" checked>ナシ <input type="radio" value="アリ" name="print" class="print" onClick="classDisable(this.form,'Kind04',!this.checked);classDisable(this.form,'nofruit',classCheck(this.form,'Kind04'));">アリ  ( <input type="checkbox" value="銀シールド" name="Kind04[]" class="Kind04" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">銀シールド <input type="checkbox" value="銀ペースト" name="Kind04[]" class="Kind04" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">銀ペースト <input type="checkbox" value="銅ペースト" name="Kind04[]" class="Kind04" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">銅ペースト <input type="checkbox" value="シルク" name="Kind04[]" class="Kind04" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))">シルク  色 <SELECT name="Kind04[]" class="Kind04" disabled onClick="classDisable(this.form,'nofruit',classCheck(this.form,this.className))"> <OPTION SELECTED VALUE="---">--- <OPTION VALUE="白">白 <OPTION VALUE="黒">黒 <OPTION VALUE="他">他 </SELECT> ) </form> </body> </html>

  • checkbox必須チェック

    function hissuCheck(form) { var paramArray = Array("…24個"); var alrtArray = Array("…24個"); var len = paramArray.length; for(i=0; i<len; i++) { var obj = form.elements[paramArray[i]]; if(obj.type == "text") { if(obj.value == "") { alert(alrtArray[i]+"は必須入力です"); form.elements[paramArray[i]].focus(); return false; } } else if(obj.type == "select-one" || obj.type == "select-multi") { for(varSelected=0, j=0; j<obj.options.length; j++) { if(obj.options[j].selected)varSelected+=obj.options[j].value; } if(varSelected == 0) { alert(alrtArray[i]+"は必須入力です"); form.elements[paramArray[i]].focus(); return false; } } else { for(varChecked=0, k=0; k<obj.length; k++) { if(obj[k].type == "checkbox") { if(obj[k].checked)varChecked++; } } if(varChecked == 0) { alert(alrtArray[i]+"は必須入力です"); return false; } } } return true; } 必須チェックですが、最後のチェックボックスだけがチェックしても「…は必須です」とアラートが表示されてしまいます。どうか宜しくお願いします

  • javascriptにフェードインを追加したい。

    下記のjavascriptに、フェードイン効果を追加するにはどうすればいいでしょうか? 現在は、クリックで、テキストが切り替わる仕様になっているんですが、これにフェードイン、フェードアウトの機能を付け加えたいです。 また、切り替わった際に下記のようにCSSの.actveをclass=""に追加させたいのですが、 どうすれば可能でしょうか? 目的は、アクティブになったボタンの背景を変更したい為です。 <div class="button actve"><a href="#" onclick="checkd1();return ChDsp2('text1','textALL');">ボタン1</a></div> 【javascript】 function ChDsp2(strShow,classHidden){ var tags=document.getElementsByTagName("div"); for(var i=0;i<tags.length;i++){ if(tags[i].className.match('textALL')){ tags[i].className=tags[i].className.replace(/hide/,"").replace(/^\s+|\s+$/,""); if(tags[i]!=document.getElementById(strShow)) tags[i].className+=' hide'; } } return false; } function checkd1(){ document.FORM.CHECK1.checked=true document.FORM.CHECK2.checked=false document.FORM.CHECK3.checked=false } function checkd2(){ document.FORM.CHECK1.checked=false document.FORM.CHECK2.checked=true document.FORM.CHECK3.checked=false } function checkd3(){ document.FORM.CHECK1.checked=false document.FORM.CHECK2.checked=false document.FORM.CHECK3.checked=true } function change(c) { var f = c.checked, btn = c.form.elements['btn1']; btn.disabled = f?false:true; f = f?'sozai/button_2.jpg':'sozai/button_1.jpg'; btn.style.backgroundImage = 'url(' + f + ')'; } 【HTML】 <div class="button"><a href="#" onclick="checkd1();return ChDsp2('text1','textALL');">ボタン1</a></div> <div class="button"><a href="#" onclick="checkd2();return ChDsp2('text2','textALL');">ボタン2</a></div> <div class="button"><a href="#" onclick="checkd3();return ChDsp2('text3','textALL');">ボタン3</a></div> <div class="clear">&nbsp;</div> <div class="area"> <form name="FORM"> <div id="text1" class="textALL"> その1、ここは最初に表示されています。 </div> <div id="text2" class="textALL hide"> その2、ここはボタン2をクリックで表示されます。 </div> <div id="text3" class="textALL hide"> その2、ここはボタン3をクリックで表示されます。 </div> </form> </div> 上記は、以前頂いたプログラムをわかる範囲で改造したものなのですが、 限界を感じまして、どなたか教えて頂けたら助かります。 宜しくお願いします。

  • ラジオボタンとセレクトボックスの選択チェック

    ラジオボタン、セレクトボタンの選択チェックをしたいのですが 同時にチェックする場合どうすればよいのでしょうか。 失敗策ですが、参考までに↓ function check() { var flag=0; if( document.form1.seibetu.length){ flag=1; var i; for(i=0; i<document.form1.seibetu.length; i++){ if(document.form1.seibetu[i].checked){ flag=0; break; } } } else{ if(!document.form1.seibetu.checked){ flag=1; } } if(flag){ window.alert('性別が選択されていません'); return false; } else{ return true; } if(document.form1.nenrei.options[document.form1.nenrei.selectedIndex]. value==""){ flag=1; } if(flag){ window.alert('年齢が選択されていません'); return false; } else{return true; } }

  • セレクトボックスの選択状態について

    セレクトボックスの横にチェックボックスがあり、 チェックボックスON→セレクトボックスはAの内容 チェックボックスOFF→セレクトボックスはBの内容 となるものがあります。 問題は、これに値を保持する機能を付けたいのです。 例えば、チェックボックスにチェックがある状態でセレクトボックスの3番目の要素を選択していたとします。そこで、チェックをはずし一度Bの内容を表示させてから、再度チェックを付けAの内容に戻した時に3番目の要素が選択されている状態にしたいです。逆の場合も同様にしたいです。アドバイスを頂けたらと思います。宜しくお願い致します。 <script type="text/javascript"> <!-- a = 0; b = 0; txt = {}; txt["A"] = new Array("設定なし","A1","A2"); txt["B"] = new Array("設定なし","B1","B2","B3"); function set(select_box,check_box){ if (document.forms[0].elements[check_box].checked) { key = "A"; b = document.forms[0].elements[select_box].options.selectedIndex; } else { key = "B"; a = document.forms[0].elements[select_box].options.selectedIndex; } while (document.forms[0].elements[select_box].options[0]){ document.forms[0].elements[select_box].options[0] = null; // セレクトボックスのメニューを消去 } for (i=0; i<txt[key].length; i++){ document.forms[0].elements[select_box].options[i] = new Option(txt[key][i],txt[key][i]); // セレクトボックスのメニューの項目を生成・表示テキストとvalue値を設定 } if (key = "A") { document.forms[0].elements[select_box].options.selectedIndex = a; } else if (key = "B") { document.forms[0].elements[select_box].options.selectedIndex = b; } } // --> </script>

  • 未選択のプルダウンメニューをアラートしたい

    過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。 フォームで未入力の項目に対してアラート&フォーカスされるようにしました。 ここに『住んでいる県』(プルダウン)を追加したいのですがどうしてもうまくいきません。 <script type='text/javascript'> <!-- function check(frm){ var hissu=Array('name','zip','sex'); var hissu_nm = Array('名前','郵便番号','性別'); var len=hissu.length; for(i=0; i<len; i++){ var obj=frm.elements[hissu[i]]; if(obj.type=='text' || obj.type=='textarea'){ if(obj.value==''){ alert(hissu_nm[i]+'は必須です'); frm.elements[hissu[i]].focus(); return false; } }else{ for(var j=0, chk=0; j<obj.length; j++){ if(obj[j].checked) chk++; } if(chk==0){   alert(hissu_nm[i]+'は必須です'); return false; } } } return true; } //--> </script> どうかお分かりになる方よろしくお願いいたします。

  • 送信前のチェック

    よろしくお願い致します。 メールフォームの送信前チェックをしたく、過去記事の http://okwave.jp/qa2275666.html を使わせて頂いております。 お聞きしたいことが複数ありましたので、下記にまとめました。 ●チェックボックスの入力チェックを追加したい (↓ラジオボタンのスクリプトをチェックボックスに置き換えてみたのですが、うまく動作しませんでした。) ●メールアドレスと確認用メールアドレスが合ってるかのチェックと、できれば書式チェックを追加したい function check(frm) { var hissu=Array('name','assumedname','poatal','address','address2','tel','email','email2','sendcheck'); var hissu_nm = Array('お名前','フリカナ','郵便番号','ご住所','ご住所(建物名・部屋番号)','電話番号','メールアドレス','確認用メールアドレス','入力内容のチェック'); var len=hissu.length; for(i=0; i<len; i++) { var obj=frm.elements[hissu[i]]; if(obj.type=='text' || obj.type=='textarea') { if(obj.value=='') { alert(hissu_nm[i]+'は必須入力項目です。必ずご入力下さい。'); frm.elements[hissu[i]].focus(); return false; } } else if(obj[0].type=='radio') { for(var j=0, chk=0; j<obj.length; j++) { if(obj[j].checked) chk++; } if(chk==0) { alert(hissu_nm[i]+'は必須入力項目です。必ずご選択下さい。'); obj[0].focus(); return false; } } else if(obj.tagName=='select') { if(obj.value == '') { alert(hissu_nm[i]+'は必須入力項目です。必ずご入力下さい。'); obj.focus(); return false; } } } return true; } どうぞ、よろしくお願い致します。

  • 一つのチェックボックスでテキストフィールドとプルダウンリストを制御

    現在以下のようなテキストフィールドとプルダウンがあります。 <form name="register" action="register_kakunin.php" method="post"> <input type="checkbox" name="name_check" onclick="fchk(this,1);" /> <input name="revenue" onChange="keisan()" type="text" id="revenue" size="6" readOnly="true"/> <input type="checkbox" name="chk" onclick="fchk2(this)" /> <select name="paymethod" disabled="disabled"> <option value="">Pay Method</option> <option value="cash">cash</option> <option value="card">card</option> <option value="point">point</option> <option value="coupon">coupon</option> </select> </form> これを function fchk(obj, name_check){ var frm=document.register; if(!obj.checked){ /* チェックされたら、テキストボックスを有効化 */ frm.revenue.readOnly=true; }else{ /* チェックが外されたら、テキストボックスを無効化 */ frm.revenue.readOnly=false; } } function fchk2(obj) { var frm=obj.form; var len=frm.elements.length; /* フォームの要素数 */ if(obj.checked==true){ /* チェックボックスが選択されている場合、   プルダウンを有効化(disabled=false) */ frm.elements["paymethod"].disabled=false; }else{ /* チェックボックスが選択されていない場合、   プルダウンを無効化(disabled=true) */ frm.elements["paymethod"].disabled=true; } } という2つのスクリプトで制御しているのですが、前者を操作するときには必ず後者も操作することになるため、一つのチェックボックスで2つとも制御できるようにしたいのですが、どうしたらいいのでしょうか? 上記のjavascriptはネットから拾ってきたもので、自作ではありません。 宜しくお願いします。

  • プルダウンを必須入力にする機能を付け足したい

    テキストボックスなどを必須入力にする以下のコードに プルダウンを必須入力にする機能を付け足したいのですが、 うまくいきません… どなたかご教授いただけませんでしょうか。 よろしくお願いいたします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <script type="text/javascript"> function chkHissu(frm){ var hissu=Array("test1","test2"); var hissu_nm = Array("テスト1","テスト2"); var len=hissu.length; for(i=0; i<len; i++){ var obj=frm.elements[hissu[i]]; if(obj.type=="text" || obj.type=="textarea" ){ if(obj.value==""){ alert(hissu_nm[i]+"は必須入力項目です"); frm.elements[hissu[i]].focus(); return false; } } } return true; } </script> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 素人考えで、 var hissu=Array("test1","test2","test3"); と var hissu_nm = Array("テスト1","テスト2","テスト3"); ifの部分に単純に obj.type=="select"を追加するだけではできませんでしたm(_ _)m 何か簡単でもいいので、解説いただけると大変喜びますm(_ _)m よろしくお願いいたします

専門家に質問してみよう