【问题标题】:Why Doesn't Knockout Validation Required Work Initially?为什么最初不需要敲除验证?
【发布时间】:2017-02-02 11:28:17
【问题描述】:

在一个简单的表单上使用 knockoutjs 和 knockout-validation 查看以下小提琴。为什么一开始点击“go”没有出现验证信息?

Javascript:

var viewmodel = function() {
    var self = this;
    self.name = ko.observable(null).extend({
        required: true
    });
    self.validation = ko.validatedObservable({
        name: self.name
    });
    self.go = function() {
        console.log(self.name());
        self.name.isValid();
    };
}
ko.applyBindings(new viewmodel());

HTML:

<input type="text" data-bind="value:name" />
<button type="button" data-bind="click:go">
  go
</button>

Fiddle

【问题讨论】:

  • “最初”是什么意思?随后的点击也没有出现验证消息...

标签: javascript html knockout.js knockout-validation


【解决方案1】:

我认为这里的问题是目前没有任何东西会触发验证器运行。

默认情况下,KO 验证器插件在值更改时触发。在初始加载时,您的输入值为空,并且定义的单击事件不会更改此值,从而强制验证器触发。

相反,在您的点击事件中,如果某些内容无效,请尝试调用 showAllMessages:

var viewmodel = function() {
  var self = this;
  self.name = ko.observable(null).extend({
    required: true
  });
  self.validation = ko.validation.group([self.name]);

  self.go = function() {
    if(self.name.isValid()){
        console.log("I'm valid!");
        console.log("Name: " + self.name());
    }else{
        self.validation.showAllMessages();
    }
  };
}

ko.applyBindings(new viewmodel());

Fiddle

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2012-11-23
    • 2013-01-13
    • 2018-04-11
    • 2020-10-11
    • 2013-12-24
    相关资源
    最近更新 更多