Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/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
Javascript 淘汰验证未显示“选择多个”的错误消息_Javascript_Knockout.js_Knockout Validation - Fatal编程技术网

Javascript 淘汰验证未显示“选择多个”的错误消息

Javascript 淘汰验证未显示“选择多个”的错误消息,javascript,knockout.js,knockout-validation,Javascript,Knockout.js,Knockout Validation,我设置了一个带有敲除验证插件的页面,用于验证用户输入。我有两个元素:一个是常规的select,另一个是select和multiple集合。这样做的目的是使这两个元素都是必需的 验证调用正在启动,但问题是没有显示select multiple的错误消息 以下是我的js代码: ko.validation.init(); function isNotUndefined(val) { return (typeof val != "undefined"); }

我设置了一个带有敲除验证插件的页面,用于验证用户输入。我有两个元素:一个是常规的
select
,另一个是
select
multiple
集合。这样做的目的是使这两个元素都是必需的

验证调用正在启动,但问题是没有显示select multiple的错误消息

以下是我的js代码:

  ko.validation.init();

    function isNotUndefined(val) {
        return (typeof val != "undefined");
    }

    function isArrayNotEmpty(val) {
        return (val.length > 0);
    }

    var viewModel = function () {
        var self = this;

        self.memberType = ko.observable().extend({
            validation: {validator: isNotUndefined, message:'Please select gender'}
        });
        self.seekingTypes = ko.observableArray().extend({
            validation: {validator: isArrayNotEmpty, message:'At least one option is required'}
        });
        self.memberTypeSource = [
            { id: 1, text: 'Man' },
            { id: 2, text: 'Woman' }
        ];
        self.errors = ko.validation.group(self);
        self.doValidation = function () {
            console.log('error count=' + self.errors().length);
            if (self.errors().length == 0) {
                console.log('Yay.');
            } else {
                self.errors.showAllMessages(true);
            }
        };

        return {
            memberType: self.memberType,
            seekingTypes: self.seekingTypes,
            memberTypeSource: self.memberTypeSource,
            errors: self.errors,
            doValidation: self.doValidation,

        }
    };

    addEventListener('load', function () {
        ko.applyBindings(viewModel);
    });
这是html:

性别:

寻求:
提交
我还使用输入文本元素测试了验证,错误消息显示良好


非常感谢您的帮助。

验证插件只修改
已选中的
绑定,使它们自动“验证”兼容

因此,
selectedOptions
不会自动验证,因此您需要在
ko之前使用
selectedOptions
调用
makebindingHandlerValidable
。applyBindings
使验证与您的multi-select一起工作:

ko.validation.makeBindingHandlerValidatable('selectedOptions');
ko.applyBindings(new viewModel);
演示

作为替代解决方案,您还可以选择以下选项中的
validationCore
(或单独的span):

<select data-bind="selectedOptions: seekingTypes,
                    options: memberTypeSource,
                    optionsText: 'text',
                    optionsValue: 'id', validationCore: seekingTypes" 
                    multiple></select>


演示。

非常感谢您为我的问题提供了不是一个而是三个解决方案,非常感谢。顺便问一句,你知道我在哪里可以找到关于敲除验证的好文档(除了github的wiki页面上的文档)?KO的哪个版本是
MakeBindingHandlerValidable
?我得到一个错误,说
makeBindingHandlerValidable不是一个函数
…@Axitation此函数是KO验证库的一部分,但是我不知道它添加到了哪个版本。它在2.0.3版本中运行良好,在1.0.2版本@Axitation中,我也得到了相同的错误,这一个对我有效: