JQuery検証は動的にルールを追加します
-
10-07-2019 - |
質問
現在、検証プラグインを使用してフォームを検証しています(ASP.Netコントロールを使用)。 form.validateメソッド内の標準セットアップからルールを削除しました:
$("form").validate({
rules: {
ctl00$ContentPlaceHolder1$dgQuestions$ctl14$iRadList_Col0: "required"
}
});
どのボタンがクリックされたかに応じてルールを追加するさまざまな機能にこれらがあります。これはテキストボックスでは正常に機能しますが、RadiobuttonListでは、プラグインがルールを追加しようとすると、要素が未定義であるというエラーが表示されます。
function addRuleSet() {
$("#ctl00$ContentPlaceHolder1$dgQuestions$ctl14$iRadList_Col0").rules("add", { required: true });
}
問題は、name属性を使用して(aspが$を入れる)idではなくラジオボタンが属するグループを定義していることだと思います(ただし、静的設定では、すべての要素がnameを使用して定義されますとにかく、関連するラジオボタンのグループにルールを追加する方法を理解していないので、アドバイスをいただければ幸いです。
PS個々のラジオボタンではなく、RadioButtonListを呼び出す必要があります。
解決
要素にクラスを設定してルールを適用することもできます。たとえば、クラスに" required"と指定した場合、入力に必要なルールがその要素に適用されます。これを行うには、コントロールのCssClassプロパティを使用します。クラスがコンテナではなく、生成された入力要素に適用されていることを確認するために、RadioButtonListなどの複合コントロールを試す必要がある場合があります。これに問題がある場合、それを行う1つの方法は、セレクターに基づいてページがロードされた後にjQueryを使用してクラスを追加することです。
<asp:RadioButtonList id="RadList" runat="server" CssClass="required">
...
</asp:RadioButtonList>
または
<script type="text/javascript">
$(function() {
$(':radio').addClass('required');
$('form').validate();
});
</script>
複雑なクラスベースのルールの場合、 addClassRules
を使用して新しいルールを追加できます。
<script type="text/javascript">
$(function() {
$.validator.addClassRules({
range0to10: {
range: [0, 10]
},
name: {
minlength: 2,
required: true
}
});
$('form').validate();
});
</script>
<form ... >
<input type="text" name="rating" id="rating" class="range0to10" />
<input type="text" name="firstName" id="firstName" class="name" />
<input type="text" name="lastName" id="lastName" class="name" />
</form>
他のヒント
この数日間、私を怒らせて、質問をすると、要素を適切に戻す方法を考えるようになりました。
$("input:radio[name='ctl00$ContentPlaceHolder1$dgQuestions$ctl14$iRadList_Col0']").rules("add", { required: true });