• ベストアンサー

このif構文の間違いを教えて下さい。

どうぞ宜しくお願いします。 *onsubmitでアラートを出力するようにしています。 if条件も"||"でひとまとめにもしてみましたが上手くいきませんでした。 ########################################## print "<SCRIPT LANGUAGE=\"JavaScript\">\n"; print "<!--\n"; print "function FldChk(){\n"; print " if( document.MyForm.name.value == '' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " if( document.MyForm.email.value == '' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " if( document.MyForm.comment.value == 'noting' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " else{\n"; print " alert('O\Kを押して10\秒\後に申\込が完\了します。有\難う御\座いました\♪ ');\n"; print " return true;\n"; print " }\n"; print "}\n"; print "// -->\n"; print "</SCRIPT>\n"; #############################################

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

  • ベストアンサー
noname#199778
noname#199778
回答No.3

質問文にあるソースをコピペして組み込んでテストしてみましたが、質問文のPerlを実行すると、JavascriptのHTMLソース部分で出力結果の文字化けが生じていて、ページロード時点でブラウザからスクリプトエラーのレポートが出ています。 そのCGI(SSI?)の実行結果はHTMLソースとしてブラウザに渡されているので、ブラウザのメニューの「HTMLソースを表示」などを使ってHTMLソースを表示させて、結果として生成されたHTMLソースを確認してみると良いと思います。 もし、上記ソースがそのまま使われているのであれば、アラートを開く指定の末端にある全角スペースが後ろの文字を巻き込んで文字化けし、結果的にJavaScriptの構文エラーを起こしているようです。 とりあえずは、その全角スペースを削除するか、全角スペースの後の'をエスケープする必要があると思います。 それと、複数の条件を設定した条件分岐を行うのであれば、if文で設定する複数の条件を||で区切って併記していく方法でも問題ないようです。 特に異常は見られませんでした。 とりあえず、質問文にある該当部分を以下のような記述にしてみてはいかがでしょうか。 print "<SCRIPT LANGUAGE=\"JavaScript\">\n"; print "<!--\n"; print "function FldChk(){\n"; print " if( document.MyForm.name.value == '' || document.MyForm.email.value == '' || document.MyForm.comment.value == 'noting' ){\n"; print " alert('名前、E-mail、選択項目は必須入力です');\n"; print " return false;\n"; print " }\n"; print " else{\n"; print " alert('OKを押して10秒後に申\込が完了します。有難う御座いました♪');\n"; print " return true;\n"; print " }\n"; print "}\n"; print "// -->\n"; print "</SCRIPT>\n"; なお、PerlとJavaScriptの構文を混同しないように注意する必要があると思います。 JavaScriptにおいて、条件分岐で特定の変数・値と特定の変数・値と等しい場合を指定する比較演算子は、比較する対象同士が文字列型でも数値型でもいずれも「==」です。 Perlでは文字列型の比較の際には「eq」を用いますが、上記ソースではPerlから「JavaScriptソースを生成してJavaScriptを動作させている」ので、ソース部分の記述はJavaScriptのルールに従う必要があるでしょう。 これですべての動作が意図通りになるかはわかりませんが、とりあえず参考まで。

sato777
質問者

お礼

わざわざテスト動作までしていただいて なんとお礼を言っていいのか解かりません。 本当に有難う御座います。 ご指摘いただいた点は、ソースから見つけ出すことが出来て解決しましたが、結局一番の原因は  ||←この条件演算子のあたりでどうやらソースに表示されないエラーがおきていたようです。 if の連続でも ||の演算子でも両方試しましたが この演算子 || の付近を¥で固める事でなんとか、すべて解決することができました。 JAVAとPerlの == eq の違いも勘違いをしていました。 いろいろとお手数をお掛けしました。 心より感謝しております。

その他の回答 (2)

noname#199778
noname#199778
回答No.2

とりあえず、そのCGIでページを吐き出させた時にどのようなエラーメッセージが出ているでしょうか。 JavaScriptのエラーについては、ブラウザでそのページを表示させて動作させれば、確認できると思います。 また、その時にCGIから吐き出されているHTMLソースを参照して(ブラウザからHTMLソースを表示させれば、受け取っているHTMLソースを確認できます)、そのJavascriptの構文に異常がないかどうかを併せて確認してみるのも良いと思います。 いずれにせよ、どのような動作を期待していて、どういった不具合が出ているのかの情報を補足いただく必要はあると思います。 何がどううまくいっていないのかわからないと、少々回答を寄せるのは難しいかと。

sato777
質問者

補足

お返事有難う御座います。 エラーはまったく出ていません。 FROMのインプット属性に入力が無かった場合ときちんと 入力された場合にそれぞれ違ったアラートを出して知らせるというものです。 入力の是非がひとつだけで(if)構文が一つだけの時はきちんとアラートが飛び出して表示されます。 (if)構文の条件が増えるとアラートが出てきません。 ちなみに、==の部分は 文字列に対しているので value="noting"のところは eq に訂正しました。 どうぞ宜しくお願いします。

回答No.1

//こういうことでしょうか? //ちなみに下のchk()をクリック時によんでやってください。 //'noting' というのは自分的に意味不明なので無視しました。 function FldChk(){ if( document.MyForm.name.value == '' ){ alert('名前、E-mail、選択項目は必須入力です '); return false; } if( document.MyForm.email.value == '' ){ alert('名前、E-mail、選択項目は必須入力です '); return false; } if( document.MyForm.comment.value == '' ){ alert('名前、E-mail、選択項目は必須入力です '); return false; } else { return true; } } function chk(){ if(FldChk()){ alert('OKを押して10秒後に申込が完了します。有難う御座いました♪ '); } }

sato777
質問者

補足

お返事ありがとうございます。 このままPerl用に書き換えてテストしてみましたが うんともすんともいいませんでした。 始めに、name == ''(名前を記入しなかった場合)に アラートでメッセージを表示する事(if)と 名前を記入した場合にその結果のメッセージをアラートで表示させること(else)まではちゃんど出来ました。 (if)の項目を増やしてからがまったく動作していません。 ”noting”は、selectのvalueで、何も選択しなかった場合のvalueにvalue="noting"と指定しています。 このJAVAスクリプトは、Perl内にて埋め込んでいますが、 FORMタグにて onsubmitをfunction fldCHk()に指定していますので、更にfunction chk()を指定するにはどういうタグで追加すればよいのでしょうか? 宜しくお願いします。

関連するQ&A

  • 一括で入力のチェックをしたいのです!

    どなたか教えてください・・・ フツー入力チェックを行う場合 <SCRIPT language="JavaScript"> <!-- function Check(){ if(document.myform.Name.value==""){ alert("名前を入力してください。"); return false; } if(document.myform.Email.value==""){ alert("Eメールアドレスを入力してください。"); return false; } if(document.myform.Email.value.indexOf("@")<=0){ alert("Eメールアドレスが正しくありません。"); return false; } if(document.myform.Comment.value==""){ alert("コメントを入力してください。"); return false; } return true; } // --> </SCRIPT> こんなカンジで各フォーム毎にチェックを行い メッセージを出したりすると思うのですが、 フォーム数が多いため、入力のチェックを 一括で行いたいのですが・・・ JavaScriptを始めて間もないため とんちんかんな質問をしている様でしたら すみません。 どなたか入力チェックを一括で出来る方法を 教えて頂けないでしょうか・・・ お願いします。

  • メールアドレスの入力チェックをして、正しくなければ戻る方法

    今、フォームを作っているところなのですが、 各必須事項は入力されていないと戻るように設定していますが、同じ形でメールアドレスもチェックしたいのですが、その際にxxx@***.xxxという正規の形でないと引っ掛かるようにしたいのですが、どうすればよいでしょうか?お分かりの方、是非教えてください。 よろしくお願いします。 -------------------------------------------- 現在のスクリプトは以下のような感じです。 これでは、大文字などでメールアドレスを入れられてもチェックを通してしまいますので。。 function check(){ if(document.FF.お名前_漢字.value == ""){ alert("お名前_漢字を入力してください"); document.FF.お名前_漢字.focus(); return(false); } if(document.FF.住所.value == ""){ alert("住所を入力してください"); document.FF.住所.focus(); return(false); } if(document.FF.email.value == ""){ alert("メールアドレスを入力してください"); document.FF.email.focus(); return(false); } return(true); } -------------------------------------------- そして送信ボタンを押すと、このスクリプトが働くように、 onSubmit="return check()" を設定しています。

  • プルダウンメニューを選択していない時に送信ボタンを押した場合、(必須の)アラートを表示したい。

    過去にほぼ同じ質問がありましたが、それでも解決出来なかったので質問させていただきました。 フォームで未入力の項目に対してアラートとフォーカスされるようにしました。 そこにプルダウンメニューを加えたものを作ろうとしたのですが、アラートの内容が全部同じ(職業が選択されていません)になってしまった事と、アラートは表示されたのですが、プルダウンメニューを選択してもアラートが出続けてしまいます。 プルダウンメニューが未選択の場合にのみアラートを表示するにはどうしたらよいでしょうか。 <SCRIPT language="JavaScript"> <!-- function chkHissu(frm){ var hissu=Array('name','kana','age','mail','sex','syumi'); 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; } function check(value){ //数字かどうかのチェック if(isNaN(value)){ alert("数値を半角で入力してください。"); //警告コメント document.form1.age.focus(); return false; } //入力があるかどうかのチェック if(!value){ alert("年齢を入力してください。"); //警告コメント document.form1.age.focus(); return false; } } function checkAd(address){ if(!address){ alert("メールアドレスを入力してください。"); } else if(address.indexOf("@",0)<=0){ alert("メールアドレスが正しくありません。"); document.form1.mail.select(); return false; } } //-- </SCRIPT> ご存知の方がいらっしゃいましたらご教授願います。

  • お問い合わせフォームを作成しているのですがジャバがうまく動いてくれません。

    お問い合わせフォームを作成しているのですが(phpとscriptです)、 script部分がうまく動いてくれません。 必須項目が名前、ふりがな、ラジオボタンで選択項目3つあります。 名前、ふりがな部分を入力せずに送信を押すとアラートがなりますが、 ラジオボタン部分がIEでは一つも選択しないとアラートが正常に機能しますが、ファイヤーフォックスでは送信されてしまいます。 下記にscript部分をコピペしておきますのでお気づきの点がありましたら教えて下さい。 <script LANGUAGE="javascript"> function CheckInput(){ /*チェック項目*/ var object = document.form_1.name.value; if(object == ""){ alert("お名前を入力してください"); return false; } /*チェック項目*/ var object = document.form_1.furigana.value; if(object == ""){ alert("ふりがなを入力してください"); return false; } /*チェック項目*/ var check_flag = 0; //チェックボックスの配列の数だけループ(1個目の配列チェック) for(var i = 1 ;i <= 3 ;i++){ //1個以上のチェックがあればフラグを変更 if(document.all("renraku["+i+"]").checked == true){ check_flag = 1;} } //フラグが0なので1個以上のチェックが無い if(check_flag == 0){ alert("ご連絡方法を選択して下さい") return false; } } </script> また、script部分ではなく、他の原因等が考えられましたら教えていただきたく思います。 宜しくお願い致します。

  • JavaScriptの記述を添削してください。

    アンケートフォームを作成して送信ボタンを押してから 送信確認メッセージを出るようにいたしました。 今までは送信確認メッセージは出さずに 必須項目の未入力部分のみの確認で行っていましたが 送信ボタンを押した後に送信確認メッセージを出してから OKなら送信、キャンセルなら元に戻るというようにしてみました。 自分で動作確認したところでは問題ないようですが、 JavaScriptは超初心者の為まったく自信がありません。 お手すきの方がいましたら 間違っている箇所などをご指摘くださいますでしょうか。 //入力確認 // function kakunin() { if (document.F2.名前.value == "") { alert("名前が入力されていません。"); document.F2.名前.focus(); return(false); } if (document.F2.ふりがな.value == "") { alert("ふりがなが入力されていません。"); document.F2.ふりがな.focus(); return(false); }  if (document.F2.メール.value == "") { alert("メールアドレスが入力されていません。"); document.F2.メール.focus(); return(false); } // //↓以下を付け足しました。 //送信確認 // myRet = confirm("送信します。よろしいですか?"); if ( myRet == false ) return(false); return(true); } <FORM name="F2" method="POST" action="***/mail.cgi" onsubmit="return kakunin()"><INPUT type="hidden" name="_to_" value="***@***.ne.jp"><INPUT type="hidden" name="_subject_" value="***"><INPUT type="hidden" name="_location_" value="***.htm"><BR> <INPUT type="submit" value="送信ボタン"> 上部、入力確認は今まで問題無く動作していました。 よろしくお願いします。

  • メールフォームの入力不備をアラートで知らせる順序は?

    ホームページを作っています。 メールフォームもあるのですが、入力不備があったときアラートで知らせるようにJavascriptで書きました。名前や住所などはちゃんとアラートがでるのですが、メール入力の項目だけはうまくいきません。単体で試すとうまくいくのですが、他の項目と組み合わせると全部のアラートがでないで送信となるか、メールの項目が出ないで送信となります。 if (document.Formp.mail.value.match(/\w+@\w+/)) return true; alert("正しいメールアドレスを入力してください"); return false; をどの位置に書けばうまくいくのでしょうか?

  • JavaScriptでの必須項目設定

    現在、下記ジャバスクリプトにてアンケートフォームの必須項目確認をしていますが、SAFARIでは問題なく動くのですが、IE7では名前の打ち込みの必須確認(※1)は作動しますが、セレクトの場合(※2)セレクトしているにも関わらず「確認して下さい」という表示が出ます。どこか間違いがあるのでしょうか?よろしくお願いいたします。 (※1)IE7でも作動します。 function FormCheck() { var f0 = document.forms[0]; if (f0.代表者様お名前.value == "") { alert("代表者様お名前を入力してください。"); f0.代表者様お名前.focus(); return false; } (※2)IE7では「確認して下さい」と出ます。 listn = f0.ご来店月.selectedIndex; if (f0.ご来店月.options[listn].value == "") { alert("ご来店月を選択してください。"); f0.ご来店月.focus(); return false; }

  • 別フレームへの必須入力チェック処理を行ないたい

    ページ構成がフレーム仕様になっていて、ヘッダページ部分にある確認ボタンを押すことで、 メインページ(フレーム名:main)部分にある入力項目の複数項目に対する必須入力チェックを行ないたいのですが、うまく処理が実行されません。 if文の条件を、if (parent.main.document.forms[0].elements[0].value == "")のようにすると、 正しく処理されますが、入力項目の数だけ記述しなければならず、さらに入力項目の数は決まっていません。 どなたか解決策をご教授いただけませんでしょうか。 <SCRIPT language="javascript"> <!-- function formchk() { if (parent.main.document.f1.food.value == "") { alert("食べ物 の項目が未入力です"); parent.main.document.f1.food.focus(); return false; } if (parent.main.document.f1.drink.value == "") { alert("飲み物 の項目が未入力です"); parent.main.document.f1.drink.focus(); return false; } } // --> </SCRIPT>

  • validateForm firefoxでalertが表示されません

    java scriptについて質問です。 ホームページ内のプルダウンメニューで、項目が選択されていない状態で「submit」ボタンが押された場合、「~を選択してください」というメッセージを表示させたいと思います。 そこで以下のようなfunction validateFormを書いたのですが、alertがIEでは表示されるのにfirefoxでは表示されません。 function validateForm() { if (document.form1.Prop1.options.value == 'Error') { alert('Please select aaa.') document.form1.Prop1.focus() return false } if (document.form1.Prop2.options.value == 'Error') { alert('Please select bbb.') document.form1.Prop2.focus() return false } if (document.form1.Prop3.options.value == 'Error') { alert('Please select ccc.') document.form1.Prop3.focus() return false } if (document.form1.Prop4.options.value == 'Error') { alert('Please select ddd.') document.form1.Prop4.focus() return false } if (document.form1.Prop5.options.value == 'Error') { alert('Please select eee.') document.form1.Prop5.focus() return false } } firefoxでもalertを表示させるには、どのようにすればいいでしょうか? 教えてくださいませ。よろしくお願いします。

  • フォームのチェックについて

    今、フォームの送信ボタンを押すとチェックする 関数を作成しております。 function restChar() { if(10000 < document.F1.ご質問内容.value.length) window.alert("ご質問内容は全角5,000字以内でお願いします"); } function check(){ var flag = 0; if(document.F1.name.value == ""){ // 「お名前」の入力をチェック flag = 1; } else if(document.F1.kana.value == ""){ // 「パスワード」の入力をチェック flag = 2; } else if(document.F1.mail.value == ""){ // 「コメント」の入力をチェック flag = 3; }      else if(document.F1.ご質問内容.value == ""){ // 「コメント」の入力をチェック flag = 4; } if(flag == 1){ window.alert('お名前を入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 2){ window.alert('フリガナを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 3){ window.alert('メールアドレスを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 }      if(flag == 4){ window.alert('ご質問内容を入力して下さい'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } fOBJ = document.F1.mail.value; check = /.+@.+\..+/; if (!fOBJ.match(check)){ window.alert("メールアドレスが正しくありません"); return false; // 送信を中止 } fOBJ = document.F1.ご質問内容.value.length; if(10000 < fOBJ){ window.alert("ご質問内容は全角5,000字以内でお願いします"); return false; // 送信を中止 } return true; // 送信を実行 } こんな感じです。 1-4のチェックは問題ないのですが、 アドレスと文字数のチェックは、一度は ダイアログがでますが、連続で押すと通ってしまいます。 何がわるいのでしょうか?

    • ベストアンサー
    • Java