2013-03-08 9 views
6

jestem kompletnym noobem, nowy w zasadzie wszystko po tutoriale do zrozumienia, używam jQuery Form PluginjQuery validate - jeśli wybrana jest opcja, nie jest wymagana następna opcja?

Próbuję zrobić formularz, w którym „styk” jest wybrany, a jeśli „telefon "Opcja jest wybrana, a następnie wymaga" czasu kontaktu ", ale jeśli wybrana jest opcja" e-mail ", oznacza to, że" czas kontaktu "nie jest wymagany.

* Formularz html. *

<form id="askquestion" action="questionprocess.php" method="post"> 

       <td><label for="response type">Method of contact:</label></td> 
       <td><select name="response_type"> 
        <option value="" selected="selected">-- Please select --</option> 

        <option value="Phone">Phone</option> 
        <option value="Email">Email</option> 
        </select></td> 
        </tr> 

        <td><label for="response time">Best time to contact:</label></td> 
       <td><select name="contact_time"> 
        <option value="" selected="selected">-- Please select --</option> 
        <option value="morning_noon">Morning to Noon</option> 
        <option value="noon_afternoon">Noon to afternoon</option> 
        <option value="evenings">Evenings</option> 
        </select></td> 
        </tr> 


     </form> 

jQuery Przepisy:

$(function() { 
    // Validate the contact form 
    $('#askquestion').validate({ 
    // Specify what the errors should look like 
    // when they are dynamically added to the form 
    errorElement: "label", 
    wrapper: "td", 
    errorPlacement: function(error, element) { 
     error.insertBefore(element.parent().parent()); 
     error.wrap("<tr class='error'></tr>"); 
     $("<td></td>").insertBefore(error); 
    }, 

    // Add requirements to each of the fields 
    rules: { 

     response_type: { 
      required:true, 
     }, 


     contact_time: { 
      required:true, 
     }, 

zaktualizować. Tak kończy się formularz sprawdzania poprawności.

// Use Ajax to send everything to form processing file 
    submitHandler: function(form) { 
     $("#send").attr("value", "Sending..."); 
     $(form).ajaxSubmit({ 
      success: function(responseText, statusText, xhr, $form) { 
       $(form).slideUp("fast"); 
       $("#response").html(responseText).hide().slideDown("fast"); 
      } 
     }); 
     return false; 
    } 
    }); 
}); 

Odpowiedz

6
rules: { 
    response_type: { 
     required: true, 
     contact_time: { 
      depends: function() { 
       return $('#askquestion select[name="response_type"]').val() === 'Phone'; 
      } 
     } 
    }, 

Jest w dokumentacji: http://docs.jquery.com/Plugins/Validation/validate#code

+0

Dzięki za tym, to ma stromą krzywą uczenia się, myślę, że potrzebna nawias zamykający, gdyż nie byłoby zweryfikować każdy. 'code'rules: { response_type: { wymagane: true, }, contact_time: { zależy: function() {return $ ('# askquestion wybierz [name = "response_type"]') (val.) === 'Telefon'; 'kod' Ignoruje wymaganą wartość zarówno dla argumentu response_type, jak i contact_time. –

+1

@FindingMozart, tak, oczywiście, przepraszam, obiekt musi być prawidłowo zamknięty. Edytowałem swoją odpowiedź, aby dodać brakujący nawias. Dzięki. –

+0

Doceniam udzieloną pomoc, tak jak powiedziałem, kompletny noob, rozumiem kod, który dostarczyłeś i próbujesz się uczyć, mam nadzieję, że nie będziesz miał nic przeciwko dalszemu pytaniu o pomoc. Teraz formularz nie wymaga sprawdzania dla contact_time, jeśli wybrano adres e-mail w opcji response_type - co jest świetne, czego chciałem. Jednak wybranie telefonu w formularzu wydaje się łamać formularz i (w lokalnym środowisku innym niż serwer) powoduje wyświetlenie strony php. Czy jest coś, czego mi brakuje? Zgaduję, że wie, że telefon jest wymagany, ale nie wie, co zrobić, gdy zostanie wybrany? –

Powiązane problemy