Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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_Jquery_Knockout.js_Knockout Validation - Fatal编程技术网

Javascript 淘汰验证组错误检查

Javascript 淘汰验证组错误检查,javascript,jquery,knockout.js,knockout-validation,Javascript,Jquery,Knockout.js,Knockout Validation,我有一份由两部分组成的淘汰表。填写第一部分时,隐藏第二部分。完成第一部分并单击“继续”后,将隐藏第一部分,并显示第二部分。我希望能够验证第一组输入,如果没有错误,则继续下一部分 我在官方的github页面上找到了我正在尝试做的事情 执行此操作时,未检测到任何错误。继续到第二部分 function ReserveViewModel(){ self.firstName = ko.observable("").extend({ required: true }); self.con

我有一份由两部分组成的淘汰表。填写第一部分时,隐藏第二部分。完成第一部分并单击“继续”后,将隐藏第一部分,并显示第二部分。我希望能够验证第一组输入,如果没有错误,则继续下一部分

我在官方的github页面上找到了我正在尝试做的事情

执行此操作时,未检测到任何错误。继续到第二部分

function ReserveViewModel(){

    self.firstName = ko.observable("").extend({ required: true });

    self.continue = function(){
        var errors = ko.validation.group([ReserveViewModel.firstName]);
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}
但是,如果我这样做,它会工作,但会尝试验证所有内容。因为第二组输入是空的,所以它就挂在那里

self.continue = function(){
    self.errors = ko.validation.group(self);
    if (self.errors().length == 0) {

    }
    else{
        self.errors.showAllMessages();
    }
}

代码不起作用有几个基本原因。在第一个示例中,您已经处于视图模型的上下文中,因此不需要使用ReserveViewModel.firstName,而在第二个示例中,您说的是检查“self”中的所有内容,也就是检查我内部的所有内容以进行验证。有两种简单的方法可以剥这只猫的皮(在我看来,只与KO.Validation进行了短暂的合作)——

深度验证-

function Person(firstname, lastname) {
    var firstName = ko.observable(firstname).extend({ required: true });
    var lastName = ko.observable(lastname).extend({ required: true });
}

function ReserveViewModel(){

    self.person = ko.observable(new Person('John', 'Jingleheimer'));

    self.continue = function(){
        var errors = ko.validation.group(self.person, { deep: true });
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}
这将验证person及其“子”属性的所有属性,以确保验证

下一个示例是简单地创建一个对象数组来检查-

function myViewModel() {
    var self = this;
    self.firstName = ko.observable().extend({ required: true });
    self.lastName = ko.observable().extend({ required: true });
    self.someOtherProperty = ko.observable().extend({ required: true });

    var firstStepValidation = [
        self.firstName,
        self.lastName
    ];

    var secondStepValidation = [
        self.someOtherProperty
    ];

    self.continue = function(){
        var errors = ko.validation.group(firstStepValidation);
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}

这将允许您将您的观测值“分块”到数组中进行测试。这可能比尝试创建单独的视图模型更容易。

因此,如果您按照第一种方式进行操作,它会按照您的预期工作-为什么要使用第二种方式?为什么不使用两个独立的视图模型并有两组验证规则呢?我不确定我是否理解你的意思。我要么没有得到验证,要么完全验证了我所展示的内容。我想我可以创建两个独立的视图模型,我从来没有这样想过。不管怎样,我仍然很困惑为什么我的示例在文档中以这种方式显示时无法运行。当我阅读您的问题时,我还不清楚为什么第一种方法不起作用。非常感谢,第二个“块”示例正是我要找的。