- ベストアンサー
解決法をご教示下さい。
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またはオブジェクトではありませんとエラーが出てしまいますが、 その原因を突き止めることが出来ません。 解決法をご教示下さい。よろしくお願い致します。
- みんなの回答 (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>
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
つっこみどころ var selectedNum=document.form.Q4.selectedIndex; としてますがこれはfはdocument.formをうけるんじゃ ないのですか?であれば var selectedNum=f.Q4.selectedIndex; でよいでしょう。 また、f.elements.lengthはf.lengthでいいような 気がします。 フローも非効率な気がしますので、文字制限の絡み がないフォロー文にて全体のソースを書いてみて ください
補足
<!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)
上記ソース中にelement は、でてきません。 elements でエラーがでるなら、 f が思ったようにフォームオブジェクトになっていないんじゃないかと思います。 あと、 var selectedNum=document.form.Q4.selectedIndex; のスペースが全角スペースになっています。
お礼
お礼が遅くなり申し訳ありません。 おっしゃるとおり、フォームの方でエラーを誘発しておりました。 ご指摘ありがとうございました。
- kokorone
- ベストアンサー率38% (417/1093)
formの構成と、この関数がどのような記述で呼ばれているかわから ないため、適切な指摘はできませんが、1点だけ指摘します。 if文は、 if (条件A || 条件B){ } が正しい記述です。
お礼
お礼が遅くなり申し訳ありません。 今後気をつけて作成致します。 ご指摘ありがとうございました。
補足
説明が雑で申し訳ありませんでした。 Q4の選択項目によって回答してもらう項目を変えるアンケートを作成したいと考えています。 また、対象の項目以外にデータが入っていて欲しくないため、Q4を変えたときにデフォルトに戻しています。 よろしくお願い致します。