2010-09-17 5 views
10

Mam formularz, który ma dołączoną mapę. Kliknięcie na mapie dodaje ukryte dane wejściowe do elementu div w formularzu.jQuery Validate: Jak sprawdzić poprawność elementu non-form?

Chcę reguły sprawdzania poprawności, aby sprawdzić, czy element div ma żadnych ukrytych elementów. Do tej pory mam tylko był w stanie to zrobić z manekina element, który trzeba ręcznie usunąć przed wysłaniem formularza:

<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(); } 
}); 

te jednak pozostawia wiele do życzenia do umieszczenia błędu, jak mój niestandardowych walidatora Metoda nie wydaje się nigdy uruchamiać funkcji unhighlight i czuję się brudna, ponieważ wprowadziła dane wejściowe wyłącznie do sprawdzania poprawności formularza (niezbyt dyskretne).

Chciałbym ma dodatkowych submitHandler a reguła, by sprawdzić obecność ukrytych wejść w div, które miałyby unhighlight spust (tak, że jeśli użytkownik nie kliknie na mapie - który tworzy nową ukryte wejście - komunikat, który wyświetla, informujący o tym, zniknie).

Jaki jest najlepszy sposób, aby to osiągnąć?

Odpowiedz

3

Próbowałem to zrobić w przeszłości. Nie wierzę, że istnieje sposób, aby to zrobić, bez wprowadzania pewnych modyfikacji w bazie kodu jquery.validator.

Patrząc na JQuery.Validator.js, sprawdź funkcję „Elements” na ln 423 zobaczysz coś takiego

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; 
      }); 

filtr („: Wejście”), co daje smutek .