Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 淘汰验证复选框列表所需的验证消息_Knockout.js_Checkboxlist_Knockout Validation - Fatal编程技术网

Knockout.js 淘汰验证复选框列表所需的验证消息

Knockout.js 淘汰验证复选框列表所需的验证消息,knockout.js,checkboxlist,knockout-validation,Knockout.js,Checkboxlist,Knockout Validation,我正在尝试使用敲除创建一个复选框列表,并要求使用敲除验证至少选中一个复选框 我遇到的问题是,如果未选中复选框,则所需的验证消息会出现多次,每个选项一次。我如何解决这个问题 工作示例: HTML <script id="koValidationCustomMessageTemplate" type="text/html"> <em class="text-danger" data-bind="validationMessage: field"></em>

我正在尝试使用敲除创建一个复选框列表,并要求使用敲除验证至少选中一个复选框

我遇到的问题是,如果未选中复选框,则所需的验证消息会出现多次,每个选项一次。我如何解决这个问题

工作示例:

HTML

<script id="koValidationCustomMessageTemplate" type="text/html">
    <em class="text-danger" data-bind="validationMessage: field"></em>
</script>

<div class="col-sm-5" data-bind="foreach: TheCheckboxListOptions">
    <div class="checkbox">
        <label>
            <input type="checkbox" data-bind="value: $data, checked: $root.TheCheckboxListSelectedValues" /><span data-bind="text: $data"></span>
        </label>
    </div>
</div>

对于这类内容,我通常使用jQuery验证在提交表单之前对表单进行验证(发回或通过AJAX)。我编写了一个自定义jQuery验证规则。以下是一个例子:

$.validator.addMethod('required_checkbox', function(value, element) {
    var $module = $('#myCheckboxList');
    var checked = $module.find('input[type="checkbox"]:checked');
    if (checked.length === 0) {
        return false;
    } else {
        return true;
    }
});

$.validator.addClassRules('required-checkbox', { 'required_checkbox': true });
标记如下所示:

<ul id="myCheckboxList">
    <li><input type="checkbox" name="MyCheckboxes" class="required-checkbox" value="@myList.Id"></li>
    ....
</ul>

敲除验证生成的错误集合只有一条错误消息。但是,由于可观察对象绑定到一组控件,因此它会在每个控件中显示一次。您可以将每个控件的验证消息模板自定义为星号或空,然后在控件数组上方显示验证摘要。看我修改过的小提琴


*

您是否可以更改视图模型,使其包含一个计算布尔属性,该属性在所选数量大于1时返回true,并针对该属性而不是整个数组编写验证?谢谢,我今天使用的解决方案与此类似,我只是在寻找更好的解决方案。
<ul id="myCheckboxList">
    <li><input type="checkbox" name="MyCheckboxes" class="required-checkbox" value="@myList.Id"></li>
    ....
</ul>
$('form').validate();
<script id="koValidationCustomMessageTemplate" type="text/html">
    <span style="color: Red" data-bind="if: field.isModified() && !field.isValid()">*</span>
</script>

<ul data-bind="foreach: errors, visible: showValidationSummary"
    style="display: none; margin-left: 5px; text-align: left;">
    <li style="color: Red"><span data-bind="text: $data"></span></li>
</ul>