2015-08-24 180 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您的擴展集。