插件窝 干货文章 Knockout-Validation分组验证:如何显示错误属性名?

Knockout-Validation分组验证:如何显示错误属性名?

错误 required data 验证 760    来源:    2025-03-24

在使用 Knockout-Validation 进行分组验证时,如果你想显示错误属性名(即哪个字段验证失败),可以通过以下步骤实现:

1. 定义 ViewModel 并应用验证规则

首先,定义你的 ViewModel 并应用 Knockout-Validation 的验证规则。

function MyViewModel() {
    this.firstName = ko.observable("").extend({ required: true });
    this.lastName = ko.observable("").extend({ required: true });
    this.email = ko.observable("").extend({ required: true, email: true });

    // 分组验证
    this.errors = ko.validation.group(this);
}

var viewModel = new MyViewModel();
ko.applyBindings(viewModel);

2. 显示错误信息

在 HTML 中,你可以通过 errors 对象来显示错误信息。errors 是一个包含所有验证错误的数组,每个错误对象都包含了错误信息、属性名等信息。

<div>
    <input data-bind="value: firstName" placeholder="First Name" />
    <input data-bind="value: lastName" placeholder="Last Name" />
    <input data-bind="value: email" placeholder="Email" />
</div>

<button data-bind="click: function() { errors.showAllMessages(); }">Validate</button>

<!-- 显示错误信息 -->
<div data-bind="foreach: errors()">
    <div>
        <span data-bind="text: $data.message"></span> (Field: <span data-bind="text: $data.property"></span>)
    </div>
</div>

3. 解释

  • errors.showAllMessages():这个方法会强制显示所有验证错误信息。
  • errors():返回一个包含所有验证错误的数组。
  • $data.message:显示错误的具体信息。
  • $data.property:显示错误的属性名(即哪个字段验证失败)。

4. 自定义错误信息

如果你想自定义错误信息,可以在定义验证规则时指定 message 参数。

this.firstName = ko.observable("").extend({ required: { message: "First Name is required" } });
this.lastName = ko.observable("").extend({ required: { message: "Last Name is required" } });
this.email = ko.observable("").extend({ required: { message: "Email is required" }, email: { message: "Please enter a valid email address" } });

5. 完整示例

<!DOCTYPE html>
<html>
<head>
    <title>Knockout-Validation Group Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.4/knockout.validation.min.js"></script>
</head>
<body>
    <div>
        <input data-bind="value: firstName" placeholder="First Name" />
        <input data-bind="value: lastName" placeholder="Last Name" />
        <input data-bind="value: email" placeholder="Email" />
    </div>

    <button data-bind="click: function() { errors.showAllMessages(); }">Validate</button>

    <!-- 显示错误信息 -->
    <div data-bind="foreach: errors()">
        <div>
            <span data-bind="text: $data.message"></span> (Field: <span data-bind="text: $data.property"></span>)
        </div>
    </div>

    <script>
        function MyViewModel() {
            this.firstName = ko.observable("").extend({ required: { message: "First Name is required" } });
            this.lastName = ko.observable("").extend({ required: { message: "Last Name is required" } });
            this.email = ko.observable("").extend({ required: { message: "Email is required" }, email: { message: "Please enter a valid email address" } });

            // 分组验证
            this.errors = ko.validation.group(this);
        }

        var viewModel = new MyViewModel();
        ko.applyBindings(viewModel);
    </script>
</body>
</html>

总结

通过 ko.validation.grouperrors 对象,你可以轻松地显示分组验证中的错误信息,并且可以自定义错误消息和显示错误属性名。