2014-07-02 23 views
7

Parsley görünür değilse, bir girişi doğrulamamak istiyorum. Tamamladığınız gibi yeni bölümleri ortaya koyan çok adımlı bir anketim var. Her bölüm kendi etiketindedir ve her formda, siz ilerledikçe ortaya çıkan çoklu bölümlere sahip olabilirim. Şu anda 1.x kullanıyorum ve bu şimdi böyle yaparız:Parsley JS 2.x - görünmeyen alanlar için doğrulamayı devre dışı bırakma

$('#' + formID).parsley({ 
      errors : { 
       container: function(element) { 
        var $container = element.parent().find('parsley-container'); 
        if($container.length === 0) 
        { 
         if($(element).hasClass('text-hide') && !$(element).hasClass('not-select')) 
         { 
          $(element).prev().addClass('is-error'); 
         } 
         else 
         { 
          $container = $('<div class="parsley-container"></div>').insertAfter(element); 
         } 
        } 
        return $container; 
       } 
      }, 
      listeners: { 
       onFieldValidate: function(elem) { 
        if(!$(elem).is(':visible')) 
        { 
         return true; 
        } 
        return false; 
       } 
      } 

Ben sadece görünen alanları doğrulamak dinleyici bölümünde. Bunu Parsley 2.x'te nasıl yapabilirim? Dokümantasyondan geçiyorum ve bunu yapmanın eşdeğer bir yolunu bulamıyorum. 2.x'te doğrulama grupları olduğunu biliyorum, ancak 1.x'te yaptığım gibi yapmanın bir yolu var mı?

cevap

11

kolay çözüm bu gibi tüm gizli girdileri kaldırmanın:

$('#' + formID).parsley({ 
    excluded: "input[type=button], input[type=submit], input[type=reset], input[type=hidden], input:hidden" 
}); 

Bu şekilde doğrulama sadece görünür girişler bağlayacaktır. Bununla birlikte, bu, bir girişin görünürlüğünü her değiştirdiğinde Parsley'i yok etmeye ve uygulamanıza zorlar.

Bundan kaçınmak için aşağıdaki «şık olmayan» çözümü kullanabilirsiniz. Bu kod, 'maydanoz: alan: validate' etkinliğinde daha iyi olurdu, ancak işe yaramayabilirdim.

'maydanoz: alan: validated' kullanıldığında, doğrulama gerçekleştirildi ve şimdi doğrulama sonucunu true olarak değiştirdik ve hata kapsayıcısını gizledik. . Maydanoz 2.1 itibariyle

$('#' + formID).parsley(); $.listen('parsley:field:validated', function(fieldInstance){ if (fieldInstance.$element.is(":hidden")) { // hide the message wrapper fieldInstance._ui.$errorsWrapper.css('display', 'none'); // set validation result to true fieldInstance.validationResult = true; return true; } }); 

*
olay parsley:field:validated

Maydanoz en PubSub modülü kullanımdan kaldırılmıştır aşağıdaki iletiyi atar; yerine

yerine parsley:field:validated son sürümlerini $.listen() kaldırılmış olması olayı field:validated


kullanmalıdır gelen jQuery olay yöntemini kullanın. Bunun yerine Parsley.on() kullanmalısınız. Örnek:

Parsley.on('field:validated', function(fieldInstance){ 
    if (fieldInstance.$element.is(":hidden")) { 
     // hide the message wrapper 
     fieldInstance._ui.$errorsWrapper.css('display', 'none'); 
     // set validation result to true 
     fieldInstance.validationResult = true; 
     return true; 
    } 
}); 
+0

Harika bir cevap, bana iyi bir zaman kazandı. Bir eklenti üzerinde çalıştığınız için oldukça zarif olduğunu düşünüyorum ... – ambe5960

+0

Gizli alan (lar) ın görünürlüğünü değiştirirseniz, doğrulama örneklerini silmek isteyeceğinizden, bunu kullanmak istediğinize dikkat ediyorum. görünür hale geri dön. – ambe5960

+0

@Potherca: güncellemeniz için teşekkürler. Test etmeye çalıştım ama 2.1.2 yerine 2.0.7 versiyonunu kullanıyordum (cdnjs.com'un son sürümü yok) ve bu yüzden düzenlemenizi geri aldım. Daha derinlerde kazandıktan sonra, 2.1 sürümü ile ilgili bir şey olduğunu fark ettim ve düzenlemenizi biraz değiştirdim. Teşekkürler! –

İlgili konular