[英]Jquery If radio button is clicked, require email field
这是我的问题。
我有一个由剃刀生成的具有多个字段的表单,但我希望仅在单击“系统管理员”单选按钮时才需要电子邮件。 默认为系统用户。
<div class="">@Html.LabelFor(m => m.Email)</div>
<div class="">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control required", placeholder = "Email" })
@Html.ValidationMessageFor(m => m.Email)
</div>
我什至尝试过在表单控制后删除“必需”并进行验证。
我有2个由剃须刀生成的单选按钮,它们具有相同的名称但值不同。
<div class="inline-editor create-user-roles">
<input id="UserRole" name="UserRole" type="radio" value="System Administrator">
<input id="UserRole" name="UserRole" type="radio" value="System User">
</div>
这是我要使用的JQuery函数。
$('input[name="UserRole"]').on('change', function () {
if ($('input[name="UserRole"]:checked').val() == "System Administrator") {
$('#Email').rules('add', {
required: true, messages: { required: "This field is required" }
});
}
else {
$('#Email').rules('add', {
required: false
});
}
});
我假设您正在使用jQueryValidation [ 从语法上 ]。 将代码更改为以下代码可以解决问题:
$('input[name="UserRole"]').on('change', function () {
if ($(this).is(':checked') && $(this).val() == "System Administrator") { // `this` refers to the current element that has raised the event, i.e. shorter for `input[name="UserRole"]` in this case
$('#Email').rules('add', {
required: true, messages: { required: "This field is required" }
});
}
else {
$('#Email').rules('remove'); // Take note of this part
}
});
请注意,您需要 删除 规则。 在特定规则上指定false
不会将其删除。
更新:在表单元素上使用.rules()
方法要求您已经在表单上调用了[ .validate()
方法[ 带空对象 ]。
也就是说,在上述代码块之前添加以下行:
$('#yourFormId').validate({});
//rest of your code where you can add your validation rules with `.rule()`.
好吧,我明白了。 我找到了一种解决所有问题的简单方法。 这是!
$('input[name="UserRole"]').on('change', function () {
if ($('input[name="UserRole"]:checked').val() == "System Administrator") {
$("#Email").removeClass('form-control').addClass('form-control required');
}
else {
$("#Email").removeClass('form-control required').addClass('form-control');
$("span[for^='Email']").remove();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.