【问题标题】:How to validate checkbox in knockout如何在淘汰赛中验证复选框
【发布时间】:2015-10-13 21:19:28
【问题描述】:

我正在使用 knockout.js 和 knockout.validation 插件。我正在尝试验证复选框,如果它被选中而不是其有效,否则无效。所以为此我在淘汰赛中创建了一个自定义验证属性:

Example Fiddle

ko.validation.rule['checked'] = {
    validator: function (value) {
        if (!value) {
            return false;
        }
        return true;
    }
};

我的视图模型是:

function VM()
{
    var self = this;
    self.Approve = ko.observable(false).extend({
        checked: { message: 'Approval required' }
    });
    self.Errors = ko.validation.group(self);
    self.Validate = function(){
        if(self.Errors().length > 0)
        self.Errors.showAllMessages();
    };
}

但验证不起作用。谁能告诉我我在这里做错了什么?

【问题讨论】:

    标签: javascript jquery knockout.js


    【解决方案1】:

    您当前的方法存在一些问题:

    1. 你打错了ko.validation.rule 它应该是ko.validation.rules
    2. 应在您首次尝试使用自定义验证器之前完成自定义规则定义和ko.validation.registerExtenders(); 的调用。
    3. 为了显示验证,您需要在某处使用validationMessage 绑定:

      <span data-bind='validationMessage: Approve'></span>
      

    所以固定脚本:

    ko.validation.rules['checked'] = {
        validator: function (value) {
          console.log(value);
            if (!value) {
                return false;
            }
            return true;
        }
    };
    
    ko.validation.registerExtenders();
    
    function VM()
    {
      var self = this;  
      self.Approve = ko.observable(false).extend({
        checked: { message: 'Approval required' }
      });
    
      self.Errors = ko.validation.group(self);
    
      self.Validate = function(){    
         if(self.Errors().length > 0)
           self.Errors.showAllMessages();
      };
    }
    
    ko.applyBindings(new VM());
    

    还有 HTML:

    <input type="checkbox" data-bind="checked: Approve" />  
    <span data-bind='validationMessage: Approve'></span>
    <button type="button" data-bind="click: Validate">Submit</button>
    

    您可以在这里试用:Demo

    【讨论】:

      【解决方案2】:

      你也可以使用相等的原生验证器:

      self.Approve = ko.observable(false).extend({
          equal: { params: true, message: 'check must be ticked' }
        });
      

      【讨论】:

        猜你喜欢
        • 2012-02-18
        • 1970-01-01
        • 2014-03-15
        • 2013-06-22
        • 2011-08-09
        • 2015-02-01
        • 2012-11-04
        • 1970-01-01
        • 2013-10-18
        相关资源
        最近更新 更多