質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

3993閲覧

JavaScript:入力チェックを行ってから確認画面へ遷移する

chaton

総合スコア15

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/01/25 08:21

編集2019/01/25 08:27

前提・実現したいこと

Java、Oracle、HTML/CSS、サーブレット/JSP、JavaScriptを勉強中です。
現在、課題で社員管理システムを作っています。

新しく社員情報を登録する際に、登録確認画面に遷移する前に入力チェックを行いたいのですが、ここで躓いています。
*入力エラーがある場合→確認画面へ遷移せずエラーメッセージを表示させる
*入力エラーがない場合→確認画面へ遷移する

1ヶ月程前に勉強をはじめたばかりで知識不足ですが、ご教示お願いします。

発生している問題・エラーメッセージ

JavaScript(jQuery)を使用して入力チェックを行っています。
エラーメッセージは出力されるようになりましたが、登録ボタンを押しても次のサーブレットに遷移しなくなってしまいました。

該当のソースコード

jsp

1<form action="<%=request.getContextPath()%>/RegistCheck" 2 method="post" onsubmit="return input_check();" class="regist_input"> 3 4 <table class="emp_form"> 5 <tr> 6 <th class="label">パスワード:</th> 7 <td class="input"><input type="password" id="emp_pass" 8 name="emp_pass"><br /><span id="emp_pass_error" 9 class="error_m"></span></td> 10 </tr> 11 <tr> 12 <th class="label">社員名:</th> 13 <td class="input"><input type="text" id="emp_name" 14 name="emp_name"><br /><span id="emp_name_error" 15 class="error_m"></span></td> 16 </tr> 17 <tr> 18 <th class="label">性別:</th> 19 <td class="input"><label><input type="radio" 20 name="gender" value="1" checked="checked" />男性</label>&emsp;<label><input 21 type="radio" name="gender" value="2" />女性</label></td> 22 </tr> 23 <tr> 24 <th class="label">住所:</th> 25 <td class="input"><input type="text" id="address" 26 name="address"><br /><span id="address_error" class="error_m"></span> 27 </td> 28 </tr> 29 <tr> 30 <th class="label">生年月日:</th> 31 <td class="input"><input type="date" id="birthday" 32 name="birthday"> 33 <br /><span id="birthday_error" 34 class="error_m"></span></td> 35 </tr> 36 <tr> 37 <th class="label">権限:</th> 38 <td class="input"><label><input type="radio" 39 name="authority" value="1" checked="checked" />一般</label>&emsp;<label><input 40 type="radio" name="authority" value="2" />管理者</label></td> 41 </tr> 42 <tr> 43 <th class="label">部署名:</th> 44 <td class="input"><select name="dept_id"> 45 <option value="1">営業部</option> 46 <option value="2">経理部</option> 47 <option value="3">総務部</option> 48 </select></td> 49 </tr> 50 </table> 51 <input type="submit" value="登録"/> 52 </form>

JavaScript(jQuery)

1// 入力内容チェックのための関数 2 function input_check(){ 3 var result = true; 4 5 // エラー用装飾のためのクラスリセット 6 $('#emp_pass').removeClass("inp_error"); 7 $('#emp_name').removeClass("inp_error"); 8 $('#address').removeClass("inp_error"); 9 $('#birthday').removeClass("inp_error"); 10 11 12 // 入力エラー文をリセット 13 $("#emp_pass_error").empty(); 14 $("#emp_name_error").empty(); 15 $("#address_error").empty(); 16 $("#birthday_error").empty(); 17 18 // 入力内容セット 19 var emp_pass = $("#emp_pass").val(); 20 var emp_name = $("#emp_name").val(); 21 var address = $("#address").val(); 22 var birthday = $("#birthday").val(); 23 24 // 入力内容チェック 25 26 // パスワード 27 if(emp_pass == ""){ 28 $("#emp_pass_error").html("* パスワードを入力してください。"); 29 $("#emp_pass").addClass("inp_error"); 30 result = false; 31 }else if(emp_pass.length > 16){ 32 $("#emp_pass_error").html("* パスワードは16文字以内で入力してください。"); 33 $("#emp_pass").addClass("inp_error"); 34 result = false; 35 } 36 // 社員名 37 if(emp_name == ""){ 38 $("#emp_name_error").html("* 社員名を入力してください。"); 39 $("#emp_name").addClass("inp_error"); 40 result = false; 41 }else if(emp_name.length > 30){ 42 $("#emp_name_error").html("* 社員名は30文字以内で入力してください。"); 43 $("#emp_name").addClass("inp_error"); 44 result = false; 45 } 46 47 // 住所 48 if(address == ""){ 49 $("#address_error").html("* 住所を入力してください。"); 50 $("#address").addClass("inp_error"); 51 result = false; 52 }else if(address.length > 60){ 53 $("#address_error").html("* 住所は60文字以内で入力してください。"); 54 $("#address").addClass("inp_error"); 55 result = false; 56 } 57 // 生年月日 58 if(birthday == ""){ 59 $("#birthday_error").html("* 生年月日を入力してください。"); 60 $("#birthday").addClass("inp_error"); 61 result = false; 62 } 63 return false; 64}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

onsubmit="return input_check();"

ふむふむ、確かにonsubmitはreturn falseにしたらサブミットを中断するからね。
きっとinput_checkで入力が全て正しい場合のみreturn trueになってサブミットが走る作りになってるんだろうな。

var result = true;

なるほど、こうしてるのね。
つまり最後の行でreturn result;って書いてるんだろうな。

return false;

は?resultどこいった。

…というわけでケアレスミスです。
これをreturn result;にしましょう。
細部は見てないので全て意図通りになる保証はありませんが、大きく前進すると思います。

投稿2019/01/25 08:28

編集2019/01/25 08:50
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chaton

2019/01/25 09:15

miyabi-sunさんのコメントで解決しました! 確かにケアレスミスでしたm(_ _)m ご丁寧な回答ありがとうございました。
guest

0

こんにちは

ぱっと見で、「ここが怪しいのでは?」と思う点は、 function input_check(){ の最後の行が

修正前:

javascript

1return false;

になっていることです。これを

修正後:

javascript

1return result;

にしてみるといかがでしょう?

補足

このような input_check() を書く場合には、まず初めに

javascript

1function input_check(){ 2 var result = true; 3 4 // TODO: ここで入力値のバリデーションを行う 5 6 return result; 7}

と書いてしまって、上記の状態で登録ボタンをクリックすればフォームがsubmit されて、サーブレットにリクエストが投げられることを、まず確認します。その後、 // TODO のところに resultfalse を入れるロジックを追加していくという手順で進めていけば、よいかと思います。

それと、入力エラーがあったときは、「CSSクラスに inp_error を持つ要素が1つ以上ある」という条件が成り立つならば、 ご質問にあるコードから result を削除してしまって、最後の return

javascript

1return $('.inp_error').length === 0;

とするのも検討してみて頂きたいリファクタ案です。 result のようなtruefalseの入っている変数のことをフラグといったりしますが、フラグを一つ増やすたびに、コードを追ってロジックを把握するのが大変になってきます。

投稿2019/01/25 08:27

編集2019/01/25 08:57
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

input_check()で必ずfalseを返しているからでは?


社内課題であればなるべく社内の人に聞いたほうが良いです。
社内の人に聞いたほうが良い理由としては

  • 仕様を把握しているのでついでに間違えてるところを指摘してもらえる
  • 対面の利点を十分に生かして教えてもらえる
  • 社内秘情報が漏れることがない

などです。
※ただし聞く人によってはそういう利点が必ずあるわけではないので注意

投稿2019/01/25 08:26

編集2019/01/25 08:32
dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問