2011-07-03 12 views
5

Sitemde çalışmak için güzel bir doğrulama çözümü almaya çalışıyorum, ancak farklı seçeneklerle sorun yaşıyorum. Dokümanları iyice okudum ve örneklere baktım ama hala sorun yaşıyorum.jQuery validate eklentisi - showErrors seçeneği - errorContainer gizlenmiyor/gösterilmiyor

Formum bir tabloda. Her satırın, normalde gizli olan, ancak her satırın uygun şekilde gösterilmesini sağlayan kendi hata satırının olmasını istiyorum.

$('#myform').validate({ 
    rules: { 
     firstName: "required", 
     lastName: "required" 
    }, 
    messages: { 
     firstName: "Enter your first name.", 
     lastName: "Enter your last name." 
    }, 
    errorContainer: '.errorRow', 
    errorLabelContainer: '.errorRow.appValueColumn', 
    errorPlacement: function(error, element) { 
     error.appendTo(element.parent().next()); 
    } 
}); 

yüzden şöyle showErrors seçeneğini kullanmayı denedim:

aşağıdaki seçenekler sakladı ve ince hata satırları gösterdi ama her hata bir satırda gösterilen hata mesajı her hata mesajının bütün birleştirme oldu :

$('#myform').validate({ 
     rules: { 
      firstName: "required", 
      lastName: "required" 
     }, 
     messages: { 
      firstName: "Enter your first name.", 
      lastName: "Enter your last name." 
     }, 
     errorContainer: '.errorRow', 
     errorContainer: '.errorRow.appValueColumn', 
     showErrors: function(errorMap, errorList) { 
     $.each(errorMap, function(key, value) { 
     $('#'+key).parent().next().children('.appValueColumn').html(errorMap[key]); 
}); 

Eh, şimdi hataları tüm ayrılmış ve doğru yerde gösterilen ama .errorRows göstermek için alınamıyor edilir. Burada neyi yanlış yapıyorum? Eğer showErrors yöntemi için doğrulama eklentisi kaynağına bakacak olursak

çok teşekkürler

cevap

3

şunlara sahip:

this.settings.showErrors 
      ? this.settings.showErrors.call(this, this.errorMap, this.errorList) 
      : this.defaultShowErrors(); 

Bu demektir ki, bu yöntem için özel bir işleyici sağlarsanız, varsayılan davranış yürütülmez.

Yapabilirsin olacak kendi showErrors işleyicisi sonunda her iki çağrı this.defaultShowErrors(): Bu yardımcı olur

showErrors: function(errorMap, errorList) { 
    $.each(errorMap, function(key, value) { 
     $('#'+key).parent().next().children('.appValueColumn') 
        .html(errorMap[key]); 
    }); 
    this.defaultShowErrors(); 
}); 

Umut!

+0

Ben kodunuzu izledi ve mayın başvurmuştur. Hata onclick gönderilir, ancak zaman zaman bazı sayfa yenilenir. Yaptığım hatayı kontrol edebilir misin lütfen? Burada bağlantı kurmak: https://jsfiddle.net/locateganesh/we7rkrxk/1/ – locateganesh

+1

Konsolda bakarak bir istisna olduğunu görebilirsiniz "Uncaught TypeError: this.defaultShowErrors bir işlev değil". Sendeki gibi şunu söylüyorum: this.defaultShowErrors() ', özel' showErrors 'işleyicisinin sonunda çağrılmalıdır, ancak kod örneğinde, $ .each() 'içine eklenmiştir! İyi yakalama ;-) –

0

bu hatlarda lider noktasız sınıfadı kullandığınızdan emin olun:

errorContainer: 'errorRow', 
errorLabelContainer: 'errorRow appValueColumn', 
İlgili konular