这是我的问题。
我有一个剃刀生成的表单,有多个字段,但我想只在单击系统管理员单选按钮时才需要电子邮件。它默认为系统用户。
<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>
我甚至尝试删除&#34; required&#34;表格控制并取出验证后。
我有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
});
}
});
答案 0 :(得分:0)
我假设您使用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()`.
答案 1 :(得分:0)
好的,我明白了。我找到了一种更简单的方法来解决我所有的问题。这是!
$('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();
}
});