2010-09-17 27 views
10

Ekli bir haritaya sahip bir formum var. Haritaya tıklandığında, formdaki bir div'a gizli girişler eklenir.jQuery Doğrulama: Biçimsiz bir öğe nasıl doğrulanır?

Bu div'in gizli öğeler içerip içermediğini kontrol etmek için bir doğrulama kuralı istiyorum. Şimdiye kadar, ben sadece elle formu göndermeden önce kaldırmak zorunda kukla elemanı ile bunu başardık: Ancak

<form action="..." method="post" id="signup"> 
    <!-- ... --> 
    <div id="zones_selected"><input type="hidden" name="dummy"></div> 
    <!-- ... --> 
</form> 

$.validator.methods.zones = function (value, element, param) { return ($zone_holder.find('input[name!=dummy]').length > 0); }; 
$('#signup').validate({ 
    rules: { 
    //... 
    'dummy': 'zones' 
    }, 
    //... 
    submitHandler: function(form) { $(form).find('input[name=dummy]').remove(); form.submit(); } 
}); 

çok bu yapraklar benim özel doğrulama gibi hata yerleştirme için istenen yöntem hiç unhighlight işlevini tetiklemiyor gibi görünmüyor ve yalnızca form doğrulaması için bir giriş koymak için kirli hissediyorum (çok göze batmayan).

Ne istiyorum bir unhighlight tetikleyici (olurdu bir div gizli girdilerin varlığını kontrol etmek hiçbir ekstra submitHandler ve bir kuraldır böyle bir kullanıcı haritayı tıklayın eğer o - Yeni bir gizli girişini oluşturur - Gösterdiğim mesajın kaybolduğunu söylüyorum).

Bunu gerçekleştirmenin en iyi yolu nedir?

cevap

3

Bunu geçmişte yapmaya çalıştım. Jquery.validator kod tabanında bazı değişiklikler yapmadan bunu yapmanın bir yolu olduğuna inanmıyorum.

JQuery.Validator.js bakarken, bu

return $([]).add(this.currentForm.elements) 
      .filter(":input") 
      .not(":submit, :reset, :image, [disabled]") 
      .not(this.settings.ignore) 
      .filter(function() { 
       !this.name && validator.settings.debug && window.console && console.error("%o has no name assigned", this); 

       // select only the first element for each name, and only those with rules specified 
       if (this.name in rulesCache || !validator.objectLength($(this).rules())) 
        return false; 

       rulesCache[this.name] = true; 
       return true; 
      }); 

filtre (": girdi") gibi bir şey göreceksiniz ln 423 üzerinde 'elemanları' fonksiyonunu kontrol size keder verecek ne .