2014-12-04 84 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);