2014-12-04 75 views
0

我面臨的問題是,我的HTML淘汰賽與淘汰賽基本文本驗證</p> <p>這裏文本框驗證錯誤

<input type="text" data-bind="value:text" /> 
<br /> 
<br /> 
<input type="button" data-bind="click:save" value="save" /> 

這裏是我的腳本

$(document).ready(function() { 

     ko.validation.registerExtenders(); 

     ko.validation.configure({ 
      registerExtenders: true, 
      decorateElement: true 
     }); 

     var vm = ko.validatedObservable({ 

      text: ko.observable().extend({ 
       required: true 
      }), 
      save: function() { 
       debugger; 
       if (this.isValid()) { 
        alert('success'); 
       } 
       else { 
        this.errors.showAllMessages(); 
        alert('error'); 
       } 
      } 
     }); 
     ko.applyBindings(vm); 

    }); 

我已經包含下面的腳本

<script src="/Scripts/jquery-2.1.1.min.js" type="text/javascript"></script> 
<script src="/Scripts/knockout-2.1.0.js" type="text/javascript"></script> 
<script src="/Scripts/knockout.mapping-latest.js" type="text/javascript"></script> 
<script src="/Scripts/knockout.validation.min.js" type="text/javascript"></script> 

當我運行這個我越來越'未定義是不是一個函數'在「this.isValid()」

請幫助我。

+0

你應該說開始的無功自我=這一點;當初始化你的虛擬機以避免混淆。你得到這個錯誤是因爲他沒有找到這個isValid()。嘗試將其改爲自我。如果這不起作用,請檢查是否所有腳本實際上都包含正確。 – sander 2014-12-04 09:57:10

+0

我已經添加var self =這在保存功能和檢查腳本,但同樣的錯誤發生,..請幫助我。 – user1551433 2014-12-04 10:02:17

+0

你誤解了。你應該添加var self = this;作爲var vm = ko.validatedObservable({。然後將if(this.isValid())更改爲if(self.isValid())並再次檢查之後的第一條語句 – sander 2014-12-04 10:09:40

回答

0

我更喜歡這種模式使用validatedObservable - http://codepen.io/dmoojunk/pen/PwNbEL

ko.validation.registerExtenders(); 

ko.validation.configure({ 
    registerExtenders: true, 
    decorateElement: true 
}); 

var vm = function(){ 
    var self = this; 
    self.text= ko.observable().extend({ 
    required: true 
    }), 
    self.save= function() { 
    if (this.isValid()) { 
     alert('success'); 
    } 
    else { 
     this.errors.showAllMessages(); 
     alert('error'); 
    } 
    } 
}; 
var viewmodel = ko.validatedObservable(new vm())(); 
ko.applyBindings(viewmodel);