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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

Q&A

解決済

2回答

3746閲覧

jQueryのValidationをかける要素をname属性の部分一致で指定する方法

j_t

総合スコア13

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

0グッド

0クリップ

投稿2019/07/25 07:26

編集2019/07/25 08:43

input要素に対してバリデーションをかけたいのですが、対象の要素が多数あるため、name属性の部分一致で指定することが出来れば便利なのですが、可能でしょうか?

バリデーションライブラリはjQuery.Validation v1.17.0とMicrosoft.jQuery.Unobtrusive.Validation v3.2.11です。

HTML5

1<form id="numform"> 2<input name="num1_1" class="form-control text-box single-line" id="num_1__1" /> 3<input name="num1_2" class="form-control text-box single-line" id="num_1__2" /> 4<input name="num1_3" class="form-control text-box single-line" id="num_1__3" /> 5             ・ 6             ・ 7             中略 8             ・ 9             ・ 10<input name="num1_10" class="form-control text-box single-line" id="num_1__10" /> 11 12<input name="num2_1" class="form-control text-box single-line" id="num_2__1" /> 13<input name="num2_2" class="form-control text-box single-line" id="num_2__2" /> 14<input name="num2_3" class="form-control text-box single-line" id="num_2__3" /> 15             ・ 16             ・ 17             中略 18             ・ 19             ・ 20<input name="num2_10" class="form-control text-box single-line" id="num_2__10" /> 21 22</form> 23<script type="text/javascript" src="js/jquery.validate.js" ></script> 24<script> 25 $("#numform").validate({ 26 errorElement: "span", 27 errorClass: "field-validation-valid text-danger", 28 rules: { 29 num1_1: { 30 required: true, 31 number: true, 32 range: [1, 223] 33 } 34 }, 35 num2_1: { 36 required: true, 37 number: true, 38 range: [200, 223] 39 } 40 }, 41 messages: { 42 num1_1: { 43 required: "入力必須です。", 44 number: "数字を指定してください。", 45 range: "1から223までの範囲で指定してください。" 46 } 47 }, 48 num2_1: { 49 required: "入力必須です。", 50 number: "数字を指定してください。", 51 range: "200から223までの範囲で指定してください。" 52 } 53 }, 54 errorPlacement: function (err, element) { 55 element.after(err); 56 } 57 }); 58</script>

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

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

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

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

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

x_x

2019/07/25 07:56

「jQuery Validation Plugin」タグをつけてください。
guest

回答2

0

.addClassRules() メソッドで追加できます。

JavaScript

1$.validator.addClassRules('single-line', { 2 required: true, 3 number: true, 4 range: [1, 223] 5});

https://jqueryvalidation.org/jQuery.validator.addClassRules/

メッセージは個別にローカライズするよりこのファイルを利用したほうがいいでしょう。
https://github.com/jquery-validation/jquery-validation/blob/master/src/localization/messages_ja.js

投稿2019/07/25 08:02

x_x

総合スコア13749

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

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

x_x

2019/07/25 08:08

言い忘れましたが、同一の class が振られているという前提です。
j_t

2019/07/26 07:02

ご回答ありがとうございます。 参考にさせていただきます。
guest

0

ベストアンサー

requiredや条件は手動で指定してメッセージのデフォルト値を調整してみては?

javascript

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.min.js"></script> 3<script> 4$.extend($.validator.messages, { 5required: "入力必須です。", 6number: "数字を指定してください。", 7min: "1以上を指定してください。", 8max: "233以上を指定してください。", 9}); 10$(function(){ 11 $("#numform").validate(); 12}); 13</script> 14<form id="numform"> 15<div><input type="number" name="num1" id="num__1" min="1" max="233" required></div> 16<div><input type="number" name="num2" id="num__2" min="1" max="233" required></div> 17<div><input type="number" name="num3" id="num__3" min="1" max="233" required></div> 18<input type="submit" value="go"> 19</form>

追記

デフォルトがだめならeachでrulesを付加してみては?

javascript

1<script> 2$(function(){ 3 $("#numform").validate(); 4 $("[name^=num]").each(function(){ 5 $(this).rules("add", { 6 required: true, 7 messages:{ 8 required: "入力必須です。", 9 number: "数字を指定してください。", 10 min: "1以上を指定してください。", 11 max: "233以上を指定してください。", } 12 }); 13 }); 14 15}); 16</script> 17<form id="numform"> 18<div><input type="number" name="num1" id="num__1" min="1" max="233"></div> 19<div><input type="number" name="num2" id="num__2" min="1" max="233"></div> 20<div><input type="number" name="num3" id="num__3" min="1" max="233"></div> 21<div><input type="number" name="not_num" id="num__4" ></div> 22<input type="submit" value="go"> 23</form>

投稿2019/07/25 07:48

編集2019/07/25 08:42
yambejp

総合スコア114883

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

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

j_t

2019/07/25 08:32 編集

ご回答ありがとうございます。 ただ、せっかくコードを書いていただいたところ申し訳ございませんが、私の質問文が悪かった部分があり、こちらの解決したい問題が正確に伝わっていませんでした。直ちに修正いたします。 要素によっては最大値と最小値を変えたいと思っており、共通のメッセージというのが使いづらい状況です。 そのため、バリデーションが共通する要素は、name属性に共通点を持たせて、部分一致で適用たいと考えました。 大変なお手数をおかけしてしまい申し訳ございません。
yambejp

2019/07/25 08:46 編集

nameで判断する(nameがnumから始まる)方法を書いておきましたが 同じクラスがついているならクラスで処理したほうがよいでしょう ちなみにminやmaxはrulesで指定してもいいですが、 htmlとしての入力制限が有効にならない場合があるので 明示的にinput要素にmin/maxを指定したほうがよいです
j_t

2019/07/26 07:43

ご回答ありがとうございます。 教えていただいた方法で実現出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問