【问题标题】:JQuery validation of radio buttons and check boxes on same form同一表单上单选按钮和复选框的 JQuery 验证
【发布时间】:2018-03-27 21:26:06
【问题描述】:

我有一个从数据库创建一组单选按钮和一组复选框的表单。这些固定在六个单选框和六个复选框上。它们用于调查问卷,当用户单击下一步按钮时会打开新版本的表单。在某些情况下,会有四个单选按钮,有时是三个。这同样适用于复选框,有时六个或四个。

我真的很难在表单发布时对其进行 JQuery 验证。我可以让单选按钮工作,但我不能成功地做复选框。

剃刀视图如下:

 @if (Model.fldAnswerType == "Radio") { @Html.Label("", String.Format(Model.fldQuestion, 1))
<br /> if (Model.fldOption1 != null) {
<label class="containers">
    @Model.fldOption1
    <input type="radio" name="Radio" id="Radio" value="@Model.fldOption1">
    <span class="radios"></span>
</label>
} if (Model.fldOption2 != null) {
<label class="containers">
    @Model.fldOption2
    <input type="radio" name="Radio" id="Radio" value="@Model.fldOption2">
    <span class="radios"></span>
</label>
} if (Model.fldOption3 != null) {
<label class="containers">
    @Model.fldOption3
    <input type="radio" name="Radio" id="Radio" value="@Model.fldOption3">
    <span class="radios"></span>
</label>
} if (Model.fldOption4 != null) {
<label class="containers">
    @Model.fldOption4
    <input type="radio" name="Radio" id="Radio" value="@Model.fldOption4">
    <span class="radios"></span>
</label>
} if (Model.fldOption5 != null) {
<label class="containers">
    @Model.fldOption5
    <input type="radio" name="Radio" id="Radio" value="@Model.fldOption5">
    <span class="radios"></span>
</label>
} if (Model.fldOption6 != null) {
<label class="containers">
    @Model.fldOption6
    <input type="radio" name="Radio" id="Radio" value="@Model.fldOption6">
    <span class="radios"></span>
</label>
} }

<fieldset class="chkGroup">
    @if (Model.fldAnswerType == "Check") { @Html.Label("", String.Format(Model.fldQuestion, 1))
    <br /> if (Model.fldOption1 != null) {
    <label class="containers">
        @Model.fldOption1
        <input type="checkbox" value="@Model.fldOption1" name="chkGroup[]" id="Check1" class="Check">
        <span class="checkmark"></span>
    </label>
    } if (Model.fldOption2 != null) {
    <label class="containers">
        @Model.fldOption2
        <input type="checkbox" value="@Model.fldOption2" name="chkGroup[]" id="Check2" class="Check">
        <span class="checkmark"></span>
    </label>
    } if (Model.fldOption3 != null) {
    <label class="containers">
        @Model.fldOption3
        <input type="checkbox" value="@Model.fldOption3" name="chkGroup[]" id="Check3" class="Check">
        <span class="checkmark"></span>
    </label>
    } if (Model.fldOption4 != null) {
    <label class="containers">
        @Model.fldOption4
        <input type="checkbox" value="@Model.fldOption4" name="chkGroup[]" id="Check4" class="Check">
        <span class="checkmark"></span>
    </label>
    } if (Model.fldOption5 != null) {
    <div id="Checks"></div>
    <label class="containers">
        @Model.fldOption5
        <input type="checkbox" value="@Model.fldOption5" name="chkGroup[]" id="Check5" class="Check">
        <span class="checkmark"></span>
    </label>
    } if (Model.fldOption6 != null) {
    <label class="containers">
        @Model.fldOption6
        <input type="checkbox" value="@Model.fldOption6" name="chkGroup[]" id="Check6" class="Check">
        <span class="checkmark"></span>
    </label>
    } 
  }
</fieldset>
<p class="control-error" name="control-error" id="control-error">You must select an answer.</p>
<p class="checkerror" name="checkerror" id="checkerror">You must select an answer chk.</p>
<input type="submit " value="Next " id="btn " class="btn btn-sm btn-primary " />

我对不同元素的 JQuery 是同时工作的,而不是单独工作,具体取决于表单上元素的类型。

 $(document).ready(function () {
        $('#myForm').submit(function () {
            if ($('#Radio').length) {
                console.log("Radio")
                if (!$("input[name='Radio']:checked").val()) {
                    $('#control-error').show();
                    return false;
                } else {
                    $('#control-error').hide();
                }
            } else {
                $('#control-error').hide();
            }

            //If chk exists do the following
            if (!$("input[name='chkGroup[]']:checked").val()) {
                $('.chkGroup').each(function () {
                    console.log("Check")
                    if ($(this).find('input[type=checkbox]:checked').length == 0) {
                        $('#checkerror').show();
                        return false;
                    }
                    else {
                        $('#checkerror').show();
                    }
                });
            } else {
                $('#control-error').hide();
            }
        });
    });

【问题讨论】:

  • 你到底想在这里做什么。 MVC 具有内置的客户端和服务器端验证,使用 ValidationAttribute 应用于您的模型属性。永远不要手动为控件生成 html。使用类型为HtmlHelper 的字符串方法。而且这些脚本都与验证无关。
  • 你会注意到问题是关于 JQuery 验证而不是 MVC 验证。
  • 这一切都是mvc自动完成的!无论如何,您的代码中根本没有任何与 jquery 验证相关的内容(即jquery.validate.js)。仅显示或隐藏消息不是验证!
  • 我完全知道它是自动完成的,客户要求所有验证都使用 JQuery 在客户端完成。 CDN 在头部,这里不包括在内。如果您有与此问题相关的答案,请随时添加您的回复。

标签: jquery razor checkbox radio-button jquery-validate


【解决方案1】:

您的单选框都有相同的 ID - 这可能会导致错误,因为它不知道要验证哪一个。

将单选框更改为具有类,然后应该能够使用与复选框相同的JS。

编辑:

$('#btn').click(function () {
        $('#body').hide();
            if ($('.Radio').length) {                  
                if (!$("input.Radio[name='Radio']:checked").val()) {
                    console.log("Radio")
                    $('#radioerror').show();
                    return false;
                } else {
                    $('#radioerror').hide();
                }
            } else {
                $('#radioerror').hide();
            }               
        });

        $('#btnCheck').click(function () {
            if ($('.Check').length) { 
            if ($('input.Check[type=checkbox]:checked').length < 1) {  
              $('#chkerror').show();
              return false;
            }
            else {                            
                $('#chkerror').hide();
            }
           } else {
                $('#chkerror').hide();
            } 
        });

【讨论】:

  • 它适用于单选按钮,但不适用于复选框,它只是显示错误消息然后直接进入下一个问题。
  • 我已经创建了这个小提琴,所以你可以明白我的意思
  • 我已更新 Fiddle 以阻止发布,但它不会检测到已单击其中一个复选框。
  • 对不起,我歪曲了你的要求。有机会我会看看这个。
猜你喜欢
  • 2018-02-19
  • 1970-01-01
  • 2019-02-02
  • 2017-04-30
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
相关资源
最近更新 更多