チョコミントアイス

どうぞ宜しくお願いします。
*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";

#############################################

A 回答 (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のルールに従う必要があるでしょう。

これですべての動作が意図通りになるかはわかりませんが、とりあえず参考まで。
    • good
    • 0
この回答へのお礼

わざわざテスト動作までしていただいて
なんとお礼を言っていいのか解かりません。
本当に有難う御座います。

ご指摘いただいた点は、ソースから見つけ出すことが出来て解決しましたが、結局一番の原因は 
||←この条件演算子のあたりでどうやらソースに表示されないエラーがおきていたようです。
if の連続でも
||の演算子でも両方試しましたが

この演算子 || の付近を¥で固める事でなんとか、すべて解決することができました。

JAVAとPerlの == eq の違いも勘違いをしていました。

いろいろとお手数をお掛けしました。
心より感謝しております。

お礼日時:2004/04/17 06:09

とりあえず、そのCGIでページを吐き出させた時にどのようなエラーメッセージが出ているでしょうか。

JavaScriptのエラーについては、ブラウザでそのページを表示させて動作させれば、確認できると思います。
また、その時にCGIから吐き出されているHTMLソースを参照して(ブラウザからHTMLソースを表示させれば、受け取っているHTMLソースを確認できます)、そのJavascriptの構文に異常がないかどうかを併せて確認してみるのも良いと思います。

いずれにせよ、どのような動作を期待していて、どういった不具合が出ているのかの情報を補足いただく必要はあると思います。 何がどううまくいっていないのかわからないと、少々回答を寄せるのは難しいかと。

この回答への補足

お返事有難う御座います。
エラーはまったく出ていません。
FROMのインプット属性に入力が無かった場合ときちんと
入力された場合にそれぞれ違ったアラートを出して知らせるというものです。
入力の是非がひとつだけで(if)構文が一つだけの時はきちんとアラートが飛び出して表示されます。

(if)構文の条件が増えるとアラートが出てきません。

ちなみに、==の部分は 文字列に対しているので
value="noting"のところは eq に訂正しました。

どうぞ宜しくお願いします。

補足日時:2004/04/17 01:13
    • good
    • 0

//こういうことでしょうか?


//ちなみに下の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秒後に申込が完了します。有難う御座いました♪ ');
}
}

この回答への補足

お返事ありがとうございます。
このままPerl用に書き換えてテストしてみましたが
うんともすんともいいませんでした。
始めに、name == ''(名前を記入しなかった場合)に
アラートでメッセージを表示する事(if)と
名前を記入した場合にその結果のメッセージをアラートで表示させること(else)まではちゃんど出来ました。
(if)の項目を増やしてからがまったく動作していません。

”noting”は、selectのvalueで、何も選択しなかった場合のvalueにvalue="noting"と指定しています。

このJAVAスクリプトは、Perl内にて埋め込んでいますが、
FORMタグにて onsubmitをfunction fldCHk()に指定していますので、更にfunction chk()を指定するにはどういうタグで追加すればよいのでしょうか?

宜しくお願いします。

補足日時:2004/04/17 00:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!