• ベストアンサー

onSubmit=の後ろは複数可能でしょうか?

<SCRIPT language=JavaScript><!-- function check() { ・ ・ ・ <FORM action="mailto:××@××.com method="post" enctype="text/plain" name="myform" onSubmit="return Check()"> で未記入のものを確認してアラートを出すようにしています。 この機能にフォーム送信後、指定ページへ移動するようにしたいのですが、それは 可能ですか?となると別ページへの移動は function Start(){ setTimeout('window.location.href="他のページのファイル名.htm"',5000); } // --> </SCRIPT> ・ ・ ・ <FORM action="mailto:××@××" method="post" enctype="text/plain" name="myform" onSubmit="Start()"> になると思うのですが、onSubmit=の後に"return Check()"と "Start()"というのは両方使えるものなのでしょうか?;でつないでも正しく動いてくれません。ページ移動が無理なら、"return Check()"を使う、 sent=0 function Check(){ if(sent==0){ sent=1; return true; }else{ if(confirm("1度送信された可能性があります。")){ return true; }else{ return false; } } } かなと思ったのですが、これだと未記入の場合のアラートが出なくなります。 もう行き詰まってしまいました・・。 解決策をご存知の方、ぜひお願いします!

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

  • ベストアンサー
  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.5

二つのチェックをくっつけてみました。 空白の場合と文字制限を条件分岐でわけました。 あと、エラーの場合アラート表示のあとにreturn false;を入れないと処理を止めて(抜けて)くれませんので注意してください。 例) <SCRIPT language=JavaScript><!-- function check() { txt_1 = document.myform.sp.value; n = txt_1.length; //まず、空白かどうかチェックして、空白でなければ200文字以内かチェックする。 if(txt_1==""){ alert("希望を200文字程度で記入してください。"); return false; }else if(n > 200){ alert("感想は200文字以内でご記入下さい。"); return false; } txt_2 = document.myform.wp.value; m = txt_2.length; if(txt_2==""){ alert("希望を200文字程度で記入してください。"); return false; }else if(m > 200){ alert("希望は200文字以内でご記入下さい。"); return false; } window.location.href="http://www.××.com"; }

harapon
質問者

お礼

あぁぁぁ、wolfwoodさん、ありがとうございます!!わざわざまとめていただけるとは・・・。本当になんとお礼を言っていいか・・・。 wolfwoodさんのおかげで無事動いてくれました。一箇所おかしいところ(1つめの希望を正しく入れて2つ目のフォームをクリックしただけで記入してくださいのアラートがでる)がありますが、頑張って直します!本当に本当にありがとうございます!うれしくて踊ってしまいそうです(笑)。

harapon
質問者

補足

皆様、本当にありがとうございました。おかげさまで無事形になりました。勉強するつもりですが、また行き詰まったらその時はまたよろしくお願いいたします。ありがとうございました!

その他の回答 (4)

  • snjokw
  • ベストアンサー率28% (8/28)
回答No.4

はじめましてSINといいます。 下記のURLの掲示板にも同じようなことが書いてありました。 よろしければ参考にしてください。 「onSubmitで複数呼び出したいのですが」というテーマの ところなどいいのではないかと思います。

参考URL:
http://board.allabout.co.jp/javascript/
harapon
質問者

お礼

始めまして、SINさん。ご回答ありがとうございます!教えていただいたアドレス、早速拝見しました!皆さん高度なことで悩んでいらっしゃる・・・。でも頑張っている(悩んでいる)のが私だけじゃない事がわかりました(笑)。これからも躓いた時に活用させて頂きます。ありがとうございました!

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.3

チェックの関数の最後にページ移動の処理を入れればよいと思います。 チェックに引っかかった場合(return(false)の時)、その時点で処理が止まります。 チェックが通り最後まで処理が流れた場合のみページ移動します。 ただし、これはフォームのactionがmailtoの時のみ有効です。 URLの場合、actionのURLの方に移動します。 例) function Check(){ チェック処理 window.location.href="~"; }

harapon
質問者

お礼

wolfwoodさんこちらの回答もありがとうございます!毎回どうもすみません。 上記ですが、現在、 if(document.myform.sp.value==""){ alert("感想を200文字程度で記入してください。"); return false; } if(document.myform.wp.value==""){ alert("希望を200文字程度で記入してください。"); return false; } return true; } // --> </SCRIPT> となっているのです。しかし私がよくわからなかったので、もうひとつのチェック 機能を続けて <SCRIPT language=JavaScript><!-- function check() { txt = document.myform.sp.value; n = txt.length; if (n > 200) alert("感想は200文字以内でご記入下さい。"); txt = document.myform.wp.value; n = txt.length; if (n > 200) alert("希望は200文字以内でご記入下さい。"); } // --></SCRIPT> と続けているのです。<SCRIPT language=JavaScript><!-- </SCRIPT>が2つあるのです(苦笑)。両方ともチェックなのですが、1つはブランクだった時のアラート、もうひとつは文字オーバーの時のアラートです。 これら全てをチェックして、クリアした時にメール送信とともに別ページへ移動、がしたいのですが、難しいでしょうか。 if (n > 200) alert("希望は200文字以内でご記入下さい。"); window.location.href="http://www.××.com"; といれると「希望を200文字程度で記入してください」のアラートがでてすぐにページジャンプしてしまうのです。く~~~。難しい! もう少しあがいてみます!ありがとうございました!

noname#10927
noname#10927
回答No.2

下記のアドレスに似たような質問がありましたので 参考にしてください。

参考URL:
http://tohoho.wakusei.ne.jp/lng/200002/00020373.htm
harapon
質問者

お礼

度々ありがとうございます。本当にお茶の一杯でもご馳走したくらいです。 早速拝見しました。・・・難しいところも多く道のりは遠かったのですが、めげずに頑張ります!本当に本当にありがとうございます!

noname#10927
noname#10927
回答No.1

ご苦労様です。 <input type="hidden" name="_to_" value="メールアドレス"> <input type="hidden" name="_subject_" value="件名"> のあとに↓ <input type="hidden" name="_location_" value="http://www.~"> でよいのでは。

harapon
質問者

お礼

あぁぁぁ、またしてもnishimori様!ありがとうございます!! 何回もアドバイスいただきまして、全てソースを見て頂きたいほどです! 上記の方法ですが、これってもしかしてCGIでしょうか?今はJavaScriptのみで作成してしまっているので、<input type="hidden" name="_to_" value="メールアドレス"> と<input type="hidden" name="_subject_" value="件名"> の記述がないのです・・・。 確かにCGIで作成していた時は <FORM action=http://www.×××/cgiemail/cgi-email-v2.pl5/mail/××.txt method=post><INPUT type=hidden value=××@××.ne.jp name=sendto><INPUT type=hidden value=/mail/移動後のファイル名.htm name=success>で飛ばしていたのですが、今はこれがないのです。素人すぎてすみません・・・。

関連するQ&A