Jquery如果单击单选按钮,则需要电子邮件字段

时间:2015-09-29 16:45:19

标签: jquery html asp.net-mvc razor

这是我的问题。
我有一个剃刀生成的表单,有多个字段,但我想只在单击系统管理员单选按钮时才需要电子邮件。它默认为系统用户。

<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
        });
    }
});

2 个答案:

答案 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();
    }
});