2011-10-13 9 views
5

Vorrei impostare una regola di validazione jQuery per richiedere che SÌ (non no) venga controllato affinché il modulo possa validare/inviare. L'utente deve accettare i termini. Se l'utente seleziona no, riceverà il messaggio di errore e il modulo non verrà convalidato. Qual è il modo corretto per farlo usando il plugin jquery validate?jQuery validate - L'utente deve selezionare la radio YES (no no) per confermare

<form id="myForm"> 
<input type="radio" name="terms" id="terms1" value="Yes!" class="required" title="Must accept terms to continue" /> Yes 
<input type="radio" name="terms" id="terms2" value="No" class="required" title="Must accept terms to continue" /> No 
</form> 

$("#myForm").validate({ 

/* 
Insert your awesome jquery validation code here. Free beer to whoever answers the question! 
*/ 

}); 

Ecco un esempio di lavoro: http://jsfiddle.net/ThcS8/1/

Complimenti a tutti coloro che possono fornire una soluzione o ancora meglio un esempio! Vota questo se stai cercando la stessa soluzione per attirare l'attenzione. Ringrazia tutti!

Si prega di votare per la soluzione preferita!

+2

Nota a margine: non si dovrebbe usare lo stesso ID per entrambi i pulsanti di opzione. Gli ID dovrebbero essere unici. – JJJ

+0

Grazie Juhana, lo cambierò. – chainwork

+1

Hai guardato http://stackoverflow.com/questions/1535187/jquery-validate-form-with-multiple-checkboxes-at-least-one-must-be-checked? – Vadim

risposta

11

Ho anche avuto questo problema, e ho provato varie cose tra cui le soluzioni di cui sopra. Alla fine ho scritto un metodo validatore personalizzato per verificare la presenza di un valore richiesto in un pulsante di scelta:

jQuery.validator.addMethod("requiredRadioValue", function(value, element, params) { 
    var selectedValue = $('input:radio[name=' + element.name + ']:checked').val(); 
    return (typeof(params) == 'array') ? (params.indexOf(selectedValue) != -1) : selectedValue == params; 
}, "You must select the required option."); 

Il metodo viene utilizzato per esempio

signedcif: { requiredRadioValue: 'yes' } 

le opzioni consentite possono essere un array o un valore singolo.

Spero che questo aiuti, speravo che questo non fosse il modo più semplice per farlo, quindi tutte le alternative ricevute con gratitudine!

+0

+1 Risposta migliore e più estensibile IMHO – tatlar

1

cambia il valore da vero e falso a 1 e 0 rispettivamente. e aggiungere regola per

$('form').validate({ 
rules:{ 
    terms: {min:1} 
}, 
messages:{ 
    terms: {min:'you must accept terms to move on.'} 
} 
}); 
+0

Grazie Funky! Potresti entrare nel dettaglio mostrandomi come lo faresti? – chainwork

+0

modificato. tuttavia non ho verificato la sintassi. potrebbe essere sbagliato –

+0

Grazie, ho provato ad aggiungere quella regola e ora visualizza il messaggio di errore se seleziono Sì o No. Pensieri? – chainwork

2

È necessario rimuovere la richiesta dalla radio nessun ingresso e poi semplicemente fare

$("form").validate(); 

questo inizializza la convalida jQuery. Verrà visualizzato il sì da selezionare e non permetterà al modulo di presentarsi finché non lo sarà.

+0

Grazie Keith, ma il problema è che non ci sono messaggi di errore che dicono all'utente perché il modulo non viene inviato. – chainwork

+0

Questo dovrebbe forzare jquery validate a far apparire un messaggio rosso "Questo campo è richiesto" sotto quel pulsante di opzione quando fanno clic su Invia.Puoi anche definire i tuoi messaggi personalizzati usando jquery validate. Vedi questo esempio: http://docs.jquery.com/Plugins/Validation/validate#options scorrere verso il basso fino a ottenere la sezione "messaggi". –

+1

Grazie Keith Sto usando jQuery validate, e il mio modulo richiede sì o no, ma voglio che venga inviato solo se l'utente seleziona sì. Se gli utenti selezionano la radio no, voglio che visualizzino un messaggio di errore. – chainwork

1

Supponendo che la casella di controllo ha la classe 'necessaria' e ha il nome 'agreeForm', ecco qualcosa che potrebbe funzionare:

jQuery("#regForm").validate({ 
     debug: true, 
     rules: { 
     agreeForm: "required", 
     }, 
     messages: { 
     agreeForm: "Please accept our Terms and Conditions.", 
     } 
    }); 
+1

Grazie a Demitry, dovrò provarlo. – chainwork

Problemi correlati