2012-09-06 11 views
18

Używam wtyczki sprawdzania poprawności znalezionej here do sprawdzenia poprawności formularza.Wtyczka walidatora jquery z wyświetlaczem: brak elementów formularza

Problem mam jest, jeśli mogę umieścić następujące wokół elementu wejściowego forma walidacja zawodzi:

<div style="display:none;"><input type="text" name="test" /></div> 

muszę tego powodu używam innych warstw kontrolne UI dla elementów wejściowych i don” Chcę, żeby były widoczne.

Działa na elementach śródliniowych i blokowych, ale potrzebuję go ukryć. Czy mimo to można to obejść?

Dzięki za wszelkie informacje zwrotne

Aktualizacja:

Ja głównie walidacji wybierz pola opcji, z django (to znaczy: {{form.select_option_element}})

Tak skutecznie:

<div style="display:none;"> 
    {{form.select_option_element}} 
</div> 

... nie działa

Right po zaksięgowaniu wydaje mi się go rozwiązać z:

<div style="visibility: hidden; height: 0;"> 
    {{form.select_option_element}} 
</div> 

Następnie pozwala mi sprawdzić poprawność pole.

+0

Proszę nie umieszczać zaakceptowanej odpowiedzi w ramach pytania. Pytania i odpowiedzi powinny być oddzielone. – dSquared

+0

nie ma problemu, nie jest używany do tego miejsca. –

+1

możliwy duplikat [jQuery Validate - Włącz sprawdzanie poprawności ukrytych pól] (http://stackoverflow.com/questions/8466643/jquery-validate-enable-validation-for-hidden-fields) –

Odpowiedz

41

Od 1.9.0 Zmian w jQuery Validate:

  • Fixed # 189 -: ukryte elementy są teraz domyślnie ignorowany

Aby włączyć go ponownie po prostu wykonaj następnie:

$(document).ready(function(){  
    $.validator.setDefaults({ 
     ignore: [] 
    }); 
}); 

Upewnij się, że to pojawia się przed nazywając rzeczywistą wtyczkę do sprawdzania poprawności w swoim kodzie.

Mam nadzieję, że to pomoże!

+0

ah, dziękuję. To działa całkiem nieźle. Zamiast tego użyję tego. –

+0

@lcplusplus Bez problemu; cieszę się, że mogłem pomóc. – dSquared

+0

Dlaczego pusta tablica, a nie pusty ciąg? – Lafi

1

Czy próbowałeś dodać atrybut stylu do elementu wejściowego? Więc zamiast zawijania z div, spróbuj:

<input type="text" name="test" value="" style="display: none;" /> 
+0

Nieważne, puste na minutę. Oto jak go rozwiązałem:

+0

Używam django ModelForms, zapomniałem wspomnieć, że głównie sprawdzam poprawność listy opcji wyboru. –

0

Są dwie rzeczy, które możesz zrobić.

1) można statycznie ustawić wartość, która nie ulegnie uszkodzeniu walidacji, na tym polu jak

<div style="display:none;"><input type="text" name="test" value="default" /></div> 

2) Jeśli chcesz neglate tę wartość w swojej metody walidacji.

Byłbym wdzięczny, gdybyś mógł podać bardziej szczegółowy kod.

+0

Mam na myśli to, że walidator nie rozpoznaje nawet pola, a nie samego procesu walidacji. –

+0

Widziałem sposób, w jaki to naprawiłeś. W każdym razie dobrze, że masz rozwiązanie. – PRP

+0

sprawdź moją aktualizację, przepraszam, że nie jestem bardziej konkretny –

3

Podoba mi się odpowiedź @dSquared, ale niestety "ignore" właściwość zostanie zresetowana dla każdego walidatora formularza na stronie. W niektórych przypadkach nie potrzebuje.

używam w ten sposób:

$(document).ready(function() { 

    var $form = $("#some-form"); 

    $form.validate().settings.ignore = []; // ! Say to validator dont ignore hidden-elements on concrete form. 

    $('#button-send').click(function() { 
     if ($form.valid()) { .. } 
    }); 

    // !! apply plugin's initializers which will hide origin elements (it can be CLEditor or Choosen plugins) 
}); 
0

Inną formą rozwiązania tego problemu jest zmiana display: none do visibility: hidden.

Np .: <input type="text" name="test" value="" style="visibility: hidden;" />

Powiązane problemy