Knockout.js 淘汰验证复选框列表所需的验证消息
我正在尝试使用敲除创建一个复选框列表,并要求使用敲除验证至少选中一个复选框 我遇到的问题是,如果未选中复选框,则所需的验证消息会出现多次,每个选项一次。我如何解决这个问题 工作示例: HTMLKnockout.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>
<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>