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

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

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

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

jQuery

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

Q&A

解決済

2回答

998閲覧

複数のinputタグの入力状況を判別し他要素を制御したい

castail

総合スコア117

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/06/23 02:10

編集2018/06/23 06:44

複数のinputタグの入力状況を判別し他要素を制御したいです。

具体的には「#UserId」「#Password」というinputタグがあり、「#UserId」は1文字未満もしくは「#Password」7文字未満の時に「.abled」を非表示、「.disabled」を表示、どちらの入力文字数も満たす場合、「.abled」を表示、「.disabled」を非表示に切り替えたいです。

可能であれば、どちらも半角を対象にし、全角入力時は文字数を満たしても対象外としたいです。

以下の処理を試したのですが、「#Password」の条件判別のみしか有効にならない状態です。
ご教授の程よろしくお願いいたします。

lang

1 2 <input type="text" name="UserId" value="" id="UserId"> 3 <input type="password" name="Password" value="" id="Password"> 4 5 <div class="disabled"></div> 6 <div class="abled"></div>

lang

1 2 if ($('#UserId,#Password').val().length == 0) { 3 $(".abled").attr({"style":"display:none;"}); 4 } 5 6 $('#UserId').on('keydown keyup keypress change', function() { 7 if ( $(this).val().length > 0 ) { 8 $('#Password').on('keydown keyup keypress change', function() { 9 if ( $(this).val().length > 6 ) { 10 $(".abled").attr({"style":"display:block;"}); 11 $(".disabled").attr({"style":"display:none;"}); 12 } else { 13 $(".abled").attr({"style":"display:none;"}); 14 $(".disabled").attr({"style":"display:block;"}); 15 } 16 17 }); 18 } else { 19 $(".abled").attr({"style":"display:none;"}); 20 $(".disabled").attr({"style":"display:block;"}); 21 } 22 23 });

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

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

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

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

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

m.ts10806

2018/06/23 02:17

htmlもご提示ください
退会済みユーザー

退会済みユーザー

2018/06/23 02:18

html ソースもアップできませんか? .abled とか言われても、それが設定してある要素が何だが分からないと・・・
castail

2018/06/23 02:21

失礼しました。htmlを追加しました。
退会済みユーザー

退会済みユーザー

2018/06/23 06:37

html の div 要素に設定したクラス名と、jQuery のセレクタに指定したクラス名が違うというのはちょっと置いといて、こうするのが良いのではという案を回答欄に書いておきます。
castail

2018/06/23 06:47 編集

失礼しました。クラス名を修正しました。なお、「shun-K」様のご回答でうまく動作しましたので、これ以降のご回答は不要です。ご対応ありがとうございました。
guest

回答2

0

ベストアンサー

イベントハンドラの設定と表示変更処理がごちゃごちゃになってる感じがします。
(UserIdをクリックしたときの処理の中でPasswordのイベントハンドラが設定されてる?
そのタイミングでイベントハンドラ設定はおかしいと思います)

表示を変える処理とイベントハンドラ設定を別々に考えるとわかりやすいですよ。

// 文字の長さをチェックして表示を変える var check = function() { if ($('#UserId').val().length > 6 && $('#Password').val().length > 0) { // チェックOK $(".abled").attr({"style":"display:block;"}); $(".disabled").attr({"style":"display:none;"}); } else { // チェックNG $(".abled").attr({"style":"display:none;"}); $(".disabled").attr({"style":"display:block;"}); } }; // イベントハンドラ設定 $('#UserId').on('keydown keyup keypress change', check); $('#Password').on('keydown keyup keypress change', check);

投稿2018/06/23 02:38

shun-K

総合スコア508

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

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

castail

2018/06/23 06:47 編集

ご教授頂いた内容で無事実現できました。 ご指示頂いた処理と設定の分離を改めて勉強したいと思います。 ありがとうございました!
guest

0

html の div 要素に設定したクラス名と、jQuery のセレクタに指定したクラス名が違うようですが?

【追伸】

上の私の 2018/06/23 15:37 のコメントで「こうするのが良いのではという案を回答欄に書いておきます」と書きましたが、それを以下に書いておきます。

ID と Passowrd のユーザー入力をクライアントスクリプトで検証して、検証 NG だったらエラーメッセージを表示するということだと理解していますが、ID と Passowrd の要件は異なるのが普通でしょうから、それぞれの要件に従って検証しテキストボックスの横に別々にエラーメッセージを表示する方がユーザーフレンドリーだと思います。

また、未入力時のエラーと、入力が要件に合うか否かは別々に検証して、それそれの結果に応じてエラーメッセージを表示するのがやはりユーザーフレンドリーだと思います。

質問に書かれた「どちらも半角を対象にし、全角入力時は文字数を満たしても対象外」というような条件は正規表現を使って検証するのがよさそうです。

その例を以下に書いておきます。

以下の例での入力の要件は、ID は半角英数字 4 ~ 8 文字、Password は最低 1 文字の数字を含む半角英数字 4 ~ 8 文字としています。

jQuery の show(), hide() は v3.x では使えないそうなので注意してください。

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="/Scripts/jquery-1.10.2.js"></script> <script type="text/javascript"> //<![CDATA[ function RequiredFieldValidatorEvaluateIsValid(value) { if (value.length == 0) { return false; } else { return true; } } function RegularExpressionValidatorEvaluateIsValid(value, expression) { if (value.length == 0) { return true; } var rx = new RegExp(expression); var matches = rx.exec(value); return (matches != null && value == matches[0]); } var idvalidationexpression = "^[a-zA-Z0-9]{4,8}$"; var passwordvalidationexpression = "^(?=.*\d)[a-zA-Z0-9]{4,8}$"; function showHideValidationResult(element, result) { if (result) { $(element).hide(); } else { $(element).show(); } } $(function () { $("#UserId").on("keydown keyup keypress change", function () { var value = $(this).val(); var result1 = RequiredFieldValidatorEvaluateIsValid(value); var element1 = document.getElementById("idRequired"); showHideValidationResult(element1, result1); var result2 = RegularExpressionValidatorEvaluateIsValid(value, idvalidationexpression); var element2 = document.getElementById("idValidation"); showHideValidationResult(element2, result2); }); $("#Password").on("keydown keyup keypress change", function () { var value = $(this).val(); var result1 = RequiredFieldValidatorEvaluateIsValid(value); var element1 = document.getElementById("passwordRequired"); showHideValidationResult(element1, result1); var result2 = RegularExpressionValidatorEvaluateIsValid(value, passwordvalidationexpression); var element2 = document.getElementById("passwordValidation"); showHideValidationResult(element2, result2); }); }); //]]> </script> </head> <body> <form id="form1" runat="server"> <input type="text" name="UserId" id="UserId" /> <span id="idRequired" style="display:none">ID は必須入力</span> <span id="idValidation" style="display:none">半角英数字 4 ~ 8 文字</span> <br /> <input type="text" name="Password" id="Password" /> <span id="passwordRequired" style="display:none">Passowrd は必須入力</span> <span id="passwordValidation" style="display:none">最低 1 文字の数字を含む半角英数字 4 ~ 8 文字</span> </form> </body> </html>

投稿2018/06/23 02:29

編集2018/06/23 06:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

castail

2018/06/23 06:47 編集

失礼しました。クラス名を修正しました。なお、「shun-K」様のご回答でうまく動作しましたので、これ以降のご回答は不要です。ご対応ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/06/23 06:55

不要とのことですが、書いてしまったのでアップしておきます。
castail

2018/06/23 07:02

わざわざご回答頂きまして、誠にありがとうございます。 こちらも参考にさせて頂きます。 この度はご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問