2016-03-18 20 views
6
aşağıdaki nakavt doğrulama eklentisi kullanıyorum

üzerine, düğmesi tıklandığında alanları doğrulamaya nasıl: Ben "Gönder" butonuna tıkladığınızda benim alanları doğrulamak istiyorum https://github.com/Knockout-Contrib/Knockout-ValidationNakavt Doğrulama: değil giriş değişikliği

, Girişin değerini değiştirdiğimde her seferinde değil. Bunu nasıl yapabilirim?

JavaScript:

ko.validation.init({ 
    insertMessages:false, 
    messagesOnModified:false, 
    decorateElement: true, 
    errorElementClass: 'wrong-field' 
}, true); 

var viewModel = { 
    firstName: ko.observable().extend({minLength: 2, maxLength: 10}), 
    lastName: ko.observable().extend({required: true}), 
    age: ko.observable().extend({min: 1, max: 100}), 
    submit: function() { 
     if (viewModel.errors().length === 0) { 
      alert('Thank you.'); 
     } 
     else { 
      alert('Please check your submission.'); 
      viewModel.errors.showAllMessages(); 
     } 
    }, 
}; 

viewModel.errors = ko.validation.group(viewModel); 

ko.applyBindings(viewModel); 

HTML:

<fieldset>  
    <div class="row" data-bind="validationElement: firstName"> 
     <label>First name:</label> 
     <input type="text" data-bind="textInput: firstName"/> 
    </div> 

    <div class="row" data-bind="validationElement: lastName"> 
     <label>Last name:</label> 
     <input data-bind="value: lastName"/> 
    </div> 

    <div class="row"> 
     <div class="row"> 
      <label>Age:</label> 
      <input data-bind="value: age" required="required"/> 
     </div> 
    </div> 
</fieldset> 

<fieldset> 
    <button type="button" data-bind='click: submit'>Submit</button> 
    &nbsp; 
</fieldset> 

Bu benim jsfiddle edilir: gözlenebilirlerinin değişiklik http://jsfiddle.net/xristo91/KHFn8/6464/

+2

belirtilen bunu undertsand düşünüyorum - Bence sen sadece bazı gerekli özledim: true' – Carsten

+0

Ne yazık ki bu yeterli değil :(Doğrulama yapmak ve canlı değişim üzerinde değil, tıklama üzerine hata sınıfını bağlamak istiyorum: –

+0

o zaman sadece tıklama işleyicisinin içindeki mantığı hareket ettirin. fonksiyon ve el ile – Carsten

cevap

9

Eh, evet validatörler kovulacağım yoktur. Ama ... doğrulayıcıların tek seçeneğiyle kandırabilirsin. Fiddler sample'u nasıl çalıştırabilirim.

burada soru daha ... ne kullanıcı tıklandığında ilk kez sonra yapmak istiyorsun ....

Temelde örnek, tüm doğrulayıcılar bir onlyIf koşulu koyar ve validateNow gözlemlenebilir Doğrulayıcıların ne zaman istediğini istediği gibi değerlendirmesi gerektiğine karar verir.

self.validateNow = ko.observable(false); 

onlyIf tüm doğrulayıcı değerlendirilir alır:

self.firstName = ko.observable().extend({ 
minLength: { 
    message:"minlength", 
    params: 2, 
    onlyIf: function() { 
    return self.validateNow(); 
    } 
}, 

ve validateNow sadece

self.submit = function() { 
self.validateNow(true); 

göndermek ayarlanmış olur ... Ben de biraz rearenged veri bağlamaları Çünkü, örneğiniz sadece kırmızı kutuyu girişlerin etrafına koyar.

Ben örnek sizinkiyle aynı "architecure" değil constructors..so ile benim kapanışları oluşturmak için alışkınım ama

sizin jsfiddle olarak çalışmaya görünüyor
+0

teşekkürler! Bu benim sorunumun iyi bir çözümdür. –

İlgili konular