- ベストアンサー
Javascriptでどうしてもうまく動きません・・・
いつもお世話になってます! ある編集ページがあって、登録ボタンを押すと、入力漏れ等チェックして、問題なければ「登録します。よろしいですか?」と表示させ、OKなら処理ページへ移動させます。NGなら、確認窓を閉じます。 そこに、"del_chk"というチェックボックスを作り、そのチェックボックスをチェックして登録ボタンを押すと、「このレコードを削除します。よろしいですか?」と表示させ、OKなら、再度「本当に削除します。よろしいですか??」と表示させ、OKなら、処理ページへ移動させます。ただし、NGを押せば、押した時点で確認窓を閉じさせたいのです。 そこで、JavaScriptを考えてみましたが、何も確認窓がでてこず、困っています。。。 どこが間違えているのかわかりません。。どなたか添削をお願い致します。 <script type="text/javascript"> <!-- function FormCheck(){ //すべて異常ないとき if(!document.form.del_chk.checked){ if(confirm("登録します。よろしいですか?")){ return true; break; }else{ return false; break; } }else{ if(confirm('削除します。よろしいですか?')){ if(confirm("本当に削除します。よろしいですか??")){ return true; break; }else{ return false; break; } } } return true; } //--></script> <formタグの所に、onsubmit="return FormCheck();"を付け加えています。 すみません、よろしくお願いします。 (あと、わかればこれも・・・ <formタグを<td>の中などで使うと、表示がずれるのですが、なにかわかればこちらもよろしくお願いします。たとえば、行の高さが異様に膨らんだり・・・)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、説明用に行番号を振りますね。 01: <script type="text/javascript"> 02: <!-- 03: function FormCheck(){ 04: //すべて異常ないとき 05: if(!document.form.del_chk.checked){ 06: if(confirm("登録します。よろしいですか?")){ 07: return true; 08: break; 09: }else{ 10: return false; 11: break; 12: } 13: }else{ 14: if(confirm('削除します。よろしいですか?')){ 15: if(confirm("本当に削除します。よろしいですか??")){ 16: return true; 17: break; 18: }else{ 19: return false; 20: break; 21: } 22: } 23: } 24: return true; 25: } 26: //--></script> 5行目: document.form.~ はオブジェクト名にならないですね。 たとえば、<form name="hoge">ならば document.hoge.~ となるべきです。 あるいはフォーム名を指定しないなら document.forms[0].~ という具合になります。 [0]の意味は、htmlの筆頭から数えて、何個目の<form>か という意味です。ちなみに、1個目は「0」です。 8行目、11行目、17行目、20行目: break; は不要です 24行目: ここで return true; するのは気持ち悪いです。 まず5行目の条件で合致すれば6行目以降へ、不合致で14行目以降へ処理が流れます。 6行目にまた条件があり、合致で7行目へ、不合致で10行目へ。 この両プロセスでそれぞれreturnしてますので、この場合、24行目の return とぶつかります。 また6行目で不合致で14行目へ流れた場合 14行目の条件に合致で16行目、不合致で19行目へ進みます ここでも両者 return しています。 すると、すべての条件でかならず7・10・16・19行目のいずれかの return を経由するはずなのに 24行目でまた return されるのは意味がありません。 だいいち、returnされたプロセスはもう次へ流れて行きませんから 各break、24行目のreturnには意味がありません。 以上、気づいた点を書きました。 タプン不動作の直接的な原因は5行目でしょう。
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
とりあえず、「break;」は、ループの中でないと書けませんので、 すべて消してください。
お礼
いつも本当にありがとうございます! break;はここでは使えないんですね・・・ 勉強になりました。確認ウィンドウがでなかったのは、このbreakがあったためでした。(削除したとたんに確認ウィンドウがでてきました・・・) ありがとうございました。
お礼
ありがとうございました。 <form name="form" としていましたので、こちらは問題ありませんでした。最終的には以下のように訂正して解決しましたありがとうございました! if(!document.form.del_shuuchi.checked){ if(confirm("登録します。よろしいですか?")){ return true; }else{ return false; } }else{ if(confirm('削除します。よろしいですか?')){ if(confirm("本当に削除します。よろしいですか??")){ return true; }else{ return false; } }else{ return false; } } }