淘汰验证 - 自定义验证器未显示消息

 潇潇洒洒牛仔_584 发布于 2023-01-30 15:25

我在我的viewmodel中有布尔属性,每个都绑定到一个复选框.我正在尝试编写一个自定义的淘汰验证器,确保至少选中一个复选框.我已经编写并连接了验证器(即当复选框发生更改时触发,并且仅在未选中复选框时返回false),但验证消息未显示.

首先,这是一个小提琴:http://jsfiddle.net/internetH3ro/aRS4a/10/

这是验证器:

ko.validation.rules['requiresOneOf'] = {
    getValue: function (o) {
        return (typeof o === 'function' ? o() : o);
    },
    validator: function (val, fields) {
        var self = this;
        var result = true;
        ko.utils.arrayForEach(fields, function (field) {
            var val = self.getValue(field);
            if (val) {
                result = false;
            }
        });

        return result;
    },
    message: 'Must select one option'
};
ko.validation.registerExtenders();

这是视图模型(名称已更改以保护无辜者):

function ViewModel() {
    var self = this;
    self.checkboxOne = ko.observable(true);
    self.checkboxTwo = ko.observable(true);
    self.checkboxThree = ko.observable(true);
    self.checkboxFour = ko.observable(true);
    self.customValidation = ko.observable().extend({
        requiresOneOf: [self.checkboxOne, self.checkboxTwo, self.checkboxThree, self.checkboxFour]
    });
}

以及相关的HTML:




我已经通过验证器,并确认当没有选中复选框时,它返回false,但应显示我的验证消息的范围不显示任何内容.我假设我错过了一步或简单的事情,但我找不到它.我想我一直盯着代码太久了.非常感谢任何帮助,谢谢.

更新:我注意到,如果我将自定义验证器添加到验证组,那就会发现它无效.我已经更新了小提琴来说明这一点.所以我的验证器正在工作,我只是无法获得要显示的darn消息.

http://jsfiddle.net/internetH3ro/aRS4a/

1 个回答
  • 请不要使用cdnjs的验证插件!

    即使它的最新版本已经超过一年了,它充满了bug,所以使用github的最新版本,直到cdnjs版本没有更新.

    在您将验证插件更新为最新版本之后,您只需messagesOnModified: false在验证配置中进行设置即可.

    ko.validation.configure({
        registerExtenders: true,
        messagesOnModified: false,
        insertMessages: true,
        parseInputAttributes: true,
        messageTemplate: null
    });
    

    演示JSFiddle.

    您需要执行此操作,因为您的observable self.customValidation永远不会实际更新它只提供验证器,但如果您的基础observable已被修改,则插件仅显示错误消息,除非您具有该messagesOnModified: false设置.

    2023-01-30 15:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有