- ベストアンサー
フォームの入力チェックをすると既に入力した項目が消える
実は過去のQ&Aの中でご紹介されていた ホームページを拝見させて頂いたのですが、 残念ながら私の応用力が足りず、 上手く作ることが出来ません。 下記のように書いてみたのですが、 これでは未入力のメッセージにOKを押すと その前に入力したものが全て消えてしまいます。 何方か、正しい書き方をご教示下さいますよう 宜しくお願い申し上げます。 <script language="JavaScript"> <!-- function checkForm(){ if(document.form1.chk1.checked == false && document.form1.chk2.checked == false) { alert('チェックなし'); return false; } { flag = 0; for ( i = 0 ; i < document.form1.radiobtn.length ; i++){ if (document.form1.radiobtn[i].checked){ flag = 1; } } if (!flag){ alert('ラジオなし'); return false; } if(document.form1.sel.selectedIndex == 0){ alert('メニューなし'); document.form1.sel.focus(); return false; } if(document.form1.bun.value == ""){ alert('文字なし'); document.form1.bun.focus(); return false; } } return true; } //--> </script>
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
消える理由は、フォームactionのリンク先を設定せずにローカルで試しているためではないでしょうか? リンク先を指定していしない場合は、もう一度今見ているページをロードするため消えているように見えてしますということです。 こんな回答でよろしかったでしょうか? とりあえずはソースにエラーはないとおもわれます。
その他の回答 (4)
- kappa_neko
- ベストアンサー率50% (14/28)
#4を訂正させてください。 すみません、すっごい寝ぼけてました。 >2回onsubmitしているから、おかしいのではないでしょうか? ↑これはいいとして、対応策は、間違ってます。 submitボタンのonClickイベントを削除 で、いけると思います。
お礼
kappa_neko様 わざわざ2回もご回答ありがとうございました。 onClick="checkForm()" を消して <input type="submit" value="送信">にするということですよね? 残念ながらこれだけでは上手く動かず、 form actionに送り先を指定すると ちゃんと動作してくれました。 結局問題は送り先を指定していなかったことのようです。 >2回onsubmitしているから、おかしいのではないでしょうか? というご指摘、確かにそうですよね! これに関しては全然疑問に思いませんでした。 もっといろんなサイトや参考書を見て勉強してみます。 本当にありがとうございました。
- kappa_neko
- ベストアンサー率50% (14/28)
2回onsubmitしているから、おかしいのではないでしょうか? 1. formタグのonSubmitを削除 & checkFormファンクション内で、 documnt.form1.submit(); (return trueではなくて。) を追加。 2. submitボタンを普通のボタンにする。 ↑どっちかで解決すると思います。 (すみません、試したわけではないです。)
- kaiu
- ベストアンサー率20% (65/315)
少しみてみましたが 一度クッキーで内容を取得するとよろしいかと。 先の回答の方がいらっしゃるので、 詳細はお任せします。
お礼
kaiu様 ご回答ありがとうございました。 単純に、form action に送り先を指定することで 解決することができました。 >一度クッキーで内容を取得するとよろしいかと。 そういうやり方もあるのですね。 と言っても、具体的なやり方は調べないとわからないという、 本当にまだまだド素人のレベルなので、 上級すぎる技かもしれませんが(^^ゞ でも、貴重なお時間にわざわざご回答下さったこと、 本当に感謝致します。 ありがとうございました。
- AquaSkyMoon
- ベストアンサー率40% (2/5)
しっかりと内容を見せてもらっていないのと、 フォームのHTMLがあれば分かりやすいのですが、、、 とりあえず1点 最初のほうのIF分でカッコがあまってるように思えるのですが、確認していないのでまちがってたらすいません。 >function checkForm(){ if(document.form1.chk1.checked == false && document.form1.chk2.checked == false) { alert('チェックなし'); return false; } <<-ここに「else」がはいるのでは?? { flag =
お礼
早速のご回答ありがとうございます。 フォームの部分は文字数の関係で投稿できなかったのですが、 下記のようにしております。 <body> <form name="form1" method="post" action="" onSubmit="return checkForm()"> <input type="checkbox" name="chk1">1 <input type="checkbox" name="chk2">2<br> <input type="radio" name="radiobtn">1 <input type="radio" name="radiobtn">2<br> <select name="sel"> <option>▽選択</option> <option value="1">項目1</option> <option value="2">項目2</option> </select><br><br> <input type="text" name="bun"><br> <input type="submit" value="送信" onClick="checkForm()"> </form> </body> また、ご指摘の通りelseを入れてみたのですが やはり上手くいきませんでした。
補足
チェックボックスとラジオボタンのvalueが抜けてました。 【訂正後】 <body> <form name="form1" method="post" action="" onSubmit="return checkForm()"> <input type="checkbox" name="chk1" value="1">1 <input type="checkbox" name="chk2" value="2">2<br> <input type="radio" name="radiobtn" value="1">1 <input type="radio" name="radiobtn" value="2">2<br> <select name="sel"> <option>▽選択</option> <option value="1">項目1</option> <option value="2">項目2</option> </select><br><br> <input type="text" name="bun"><br> <input type="submit" value="送信" onClick="checkForm()"> </form> </body>
お礼
AquaSkyMoon様 2度もお答え頂いて、大変感謝しております。 #3のご回答で全て解決致しました。 form action に送り先を指定すると、 ちゃんと消えずに書き込めました\(^o^)/ 分かってみると単純なことでしたが、 どうしても分からなくて困っていました。 今回のご回答のおかげで思うとおりのフォームが作れます。 本当にどうもありがとうございました。