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

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

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

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

JavaScript

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

Q&A

解決済

1回答

727閲覧

innerHTMLで追加したinputのバリデーションが機能しない

j_t

総合スコア13

HTML5

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

JavaScript

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

0グッド

2クリップ

投稿2019/07/24 07:24

編集2019/07/24 08:31

ボタンを押すとinputが生成されるコードを書いたのですが、JavascriptのinnerHTMLを使って生成されたinputでは設定しているバリデーションが機能せず、エラーメッセージが表示されません。

対照的に、地に書いたinputの場合は設定されているバリデーションが機能し、エラーメッセージを表示することができます。

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

innerHTMLで生成する要素にバリデーションを付けてエラーメッセージが出るようにする方法はないのでしょうか?
教えていただけると大変助かります。

以下にHTMLのコードを載せました。

HTML5

1<input name="num1" class="form-control text-box single-line" id="num__1" type="number" data-val-required="入力は必須です。" data-val="true" data-val-range-min="1" data-val-range-max="223" data-val-range="1から223までの範囲で指定してください。" data-val-number="第1オクテットには数字を指定してください。" value="" /> 2<span class="field-validation-valid text-danger" data-valmsg-replace="true" data-valmsg-for="num1" id="num_vali1"></span> 3 4<div> 5 <button onclick="add()">input追加</button> 6</div> 7 8<div id="piyo"> 9</div> 10 11<script> 12 function add() { 13 var div_element = document.createElement("div"); 14 div_element.innerHTML = '<input name="num2" class="form-control text-box single-line" id="num__2" type="number" data-val-required="入力は必須です。" data-val="true" data-val-range-min="1" data-val-range-max="223" data-val-range="1から223までの範囲で指定してください。" data-val-number="第1オクテットには数字を指定してください。" value="" />' 15 + '<span class="field-validation-valid text-danger" data-valmsg-replace="true" data-valmsg-for="num2" id="num_vali2"></span>'; 16 var parent_object = document.getElementById("piyo"); 17 parent_object.appendChild(div_element); 18 } 19</script>

以下が実行したときの画面です。
実行イメージ

jQueryの書き方でバリデーションをかける方法もありますが、タグの書き方やjavascriptで行う方法はないでしょうか?
jQueryでのバリデーションのかけ方

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

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

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

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

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

kei344

2019/07/24 07:25

validationに使用しているライブラリを提示してください。
maisumakun

2019/07/24 07:27

バリデーションライブラリとしては何を使っていますか?
m.ts10806

2019/07/24 07:29

>@section Scripts{ これは何かのテンプレートエンジンでしょうか。(C#かな?) タグの情報だけで質問したいのでしたらブラウザ出力した際の「ソースを表示」で確認できるHTMLだけを提示してください。
yambejp

2019/07/24 07:32

命題の状況だとaddしないinputにもバリデートは効いていませんね
j_t

2019/07/24 07:49

ご指摘ありがとうございます。 バリデーションライブラリを提示しました。 また、質問には不要な要素ということで「@section Scripts{」を削除しました。Razorのソースでした。
yambejp

2019/07/24 08:02

jQueryのバリデーションをかけるためのスクリプトってないのでしょうか?
j_t

2019/07/24 08:33

jQueryでのかけ方も調べたら出てきましたが、出来ればinnerHTMLなどjavascriptの書き方で解決したいです。 無理であれば、jQueryでバリデーションをかけます。
yambejp

2019/07/24 08:44 編集

> バリデーションライブラリはjQuery.Validation v1.17.0 としながら > jQueryの書き方でバリデーションをかける方法もありますが、タグの書き方やjavascriptで行う方法はないでしょうか? というのはロジックが破綻しています 結局、jQueryのバリデーションライブラリは利用していないのですね?
j_t

2019/07/24 09:12

元々のソースはMVCを使って書いてあります。Listの形式で受け取ったmodelに動的に要素を追加してpostで送る処理を書きたかったのですが、 @HTML.EditorForと@ValidationMessageForで生成されるHTMLのコードを複製することでコントロールの動的な追加およびバリデーションを実現しようと考え、そのやり方に固執していました。 jQueryでのかけ方も試してみようと思います。
j_t

2019/07/25 00:17

>命題の状況だとaddしないinputにもバリデートは効いていませんね 昨日はバリデーションが効いていたのですが、今日実行したら効かなくなっていました。 信じられないですが。
guest

回答1

0

自己解決

jQueryによるvalidationルールを設定することで解決しました。

別の質問でのyambejpさんからのご回答を使わせていただきました。

jQuery

1$("[name^=num]").each(function () { 2 $(this).rules("add", { 3 required: true, 4 number: true, 5 range:[1,223], 6 regex: "[^.]+", 7 messages: { 8 required: "入力必須です。", 9 number: "数字を指定してください。", 10 range: "1から223までの範囲で指定してください。", 11 regex: "整数で入力してください。" 12 } 13 }); 14 });

投稿2019/07/26 07:51

j_t

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問