2015-08-24 85 views
1

我想使用淘汰赛js扩展器进行自定义验证。这个扩展器只是用来检查输入的输入是否是一个数字。knockoutjs扩展失败后禁用按钮

如果我把它留空,我会得到验证规则Cannot be empty,我不能按下按钮。如果我输入一个字母,我会得到验证规则Must be a number,但该按钮仍处于启用状态。 注释掉的代码禁用了按钮,但也改变了CSS,我不认为这是最好的解决方案,因为required扩展工作正常。

有没有办法来防止数字扩展失败时提交按钮提交?

ko.extenders.numeric = function (target, message) { 
    target.hasError = ko.observable(); 
    target.validationMessage = ko.observable(); 

    function validate(value) { 
     if (isNaN(value)) { 
      target.hasError(true); 
      target.validationMessage(message); 

      console.log("This is NaN"); 

      //$('#btnSearch').attr('disabled', 'disabled'); 
     } else { 
      target.hasError(false); 

      //$('#btnSearch').removeAttr('disabled'); 
     } 
    } 

    target.subscribe(validate); 

    return target; 
} 

这是我观察到:

this.accountNumber = ko.observable().extend({ required: { message: "Cannot be empty" }, numeric: "Must be a number" }); 
+3

使用按钮上的'disable'绑定,并将其绑定到您的扩展器设置的'hasError'。 http://knockoutjs.com/documentation/disable-binding.html –

回答

2

使用disable binding上的按钮,并将其绑定到hasError您的扩展集。