Convalida del gruppo di pulsanti di opzione mediante il plug-in di convalida jQuery


128

Come eseguire la convalida per un gruppo di pulsanti di opzione (è necessario selezionare un pulsante di opzione) utilizzando il plug-in di convalida jQuery?


Guarda la risposta di c.reeves in forum.jquery.com/topic/…

Esiste un nuovo validatore jQuery che è molto potente e facile da usare. Puoi verificarlo: code.google.com/p/bvalidator
Nenad

non voglio includere un'intera libreria per qualcosa di così semplice
Doug Molineux,

Risposte:


113

Con le versioni più recenti di jquery (1.3+ credo), tutto ciò che devi fare è impostare uno dei membri del set radio richiesto e jquery si occuperà del resto:

<input type="radio" name="myoptions" value="blue" class="required"> Blue<br />
<input type="radio" name="myoptions" value="red"> Red<br />
<input type="radio" name="myoptions" value="green"> Green

Quanto sopra richiederebbe almeno 1 delle 3 opzioni radio con il nome di "mie opzioni" da selezionare prima di procedere.

Il suggerimento dell'etichetta di Mahes, a proposito, funziona meravigliosamente!


Questa è ora la risposta migliore per me con gli aggiornamenti di jQuery. +1.
Kieran Andrews,

6
L'unico problema è che quando nessuno di questi è selezionato, jQuery validate evidenzia il primo pulsante di opzione in rosso, ma in realtà probabilmente vorrai evidenziarli TUTTI. Inoltre, dopo aver controllato un pulsante di opzione, il rosso dovrebbe scomparire.
Haacked

2
@Haacked È possibile utilizzare la funzione di callback errorPlacement nelle opzioni di convalida per posizionare in modo significativo il messaggio di errore?
autonomatt

2
@Haacked: l'aggiunta focusInvalid: falsealle validate()opzioni impedirà l'evidenziazione del primo pulsante di opzione.
Jim Miller,

2
Lo faccio sempre in questo modo e posiziono l'etichetta di errore nella funzione errorPlacement. Questo è ciò che faccio per i pulsanti di opzione: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (element); }
Francisco Goldenstein,

24

utilizzare la seguente regola per convalidare la selezione del gruppo di pulsanti di opzione

myRadioGroupName : {required :true}

myRadioGroupName è il valore assegnato all'attributo name


15
Si noti che se si desidera controllare la posizione dell'etichetta, è possibile fornire la propria etichetta di errore nel punto desiderato con il testo desiderato: <label for = "myRadioGroupName" class = "error" style = "display: none; "> Per favore scegline uno. </label>
Tom,

@ Tom è inutile scrivere tu stesso il labeltag per l'errore, in realtà il plugin aggiunge automaticamente questo tag dell'etichetta di errore.
ahmehri,

3
Un po 'di tempo fa, ma immagino che ciò che stavo cercando di fare fosse posizionare <label> altrove nel DOM, piuttosto che dove è stato creato automaticamente dal plugin. Inoltre, è possibile che il comportamento del plugin sia cambiato negli ultimi 5 anni ...
Tom,

Triste come richiede il "nome" invece del "tipo" qui per errori personalizzati.
justdan23,

19

Puoi anche usare questo:

<fieldset>
<input type="radio" name="myoptions[]" value="blue"> Blue<br />
<input type="radio" name="myoptions[]" value="red"> Red<br />
<input type="radio" name="myoptions[]" value="green"> Green<br />
<label for="myoptions[]" class="error" style="display:none;">Please choose one.</label>
</fieldset>

e aggiungi semplicemente questa regola

rules: {
 'myoptions[]':{ required:true }
}

Indica come aggiungere regole.


1
Ma ciò comporterebbe errori nella convalida HTML5, credo che l'attributo for debba essere un riferimento ID (che non possiamo impostare 3 pulsanti di opzione sullo stesso ID).
armyofda12mnkeys il

1
C'è una GRANDE differenza tra l'attributo name e l'attributo id.
Norman H,

2
Si prega di non che un pulsante di opzione dovrebbe restituire un solo valore, pertanto name="myoptions[]"è un po 'confuso poiché suggerisce che possono essere restituiti più valori.
Dementico,

Mette il messaggio di errore in cima. <style> .radio-group {position: relative; margin-top: 40px; } # myoptions-error {position: absolute; sopra: -25px; } </style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required"> Blue <br /> <input type = "radio" name = "myoptions" value = "red"> Red <br /> <input type = "radio" name = "myoptions" value = "green"> Green </div> </div> <! - end radio- gruppo ->
Sonobor

4

Secondo la risposta di Brandon. Ma se si utilizza ASP.NET MVC che utilizza la convalida discreta, è possibile aggiungere l'attributo data-val al primo. Mi piace anche avere etichette per ogni pulsante di opzione per usabilità.

<span class="field-validation-valid" data-valmsg-for="color" data-valmsg-replace="true"></span>
<p><input type="radio" name="color" id="red" value="R" data-val="true" data-val-required="Please choose one of these options:"/> <label for="red">Red</label></p>
<p><input type="radio" name="color" id="green" value="G"/> <label for="green">Green</label></p>
<p><input type="radio" name="color" id="blue" value="B"/> <label for="blue">Blue</label></p>

3

Un altro modo per convalidare è come questo.

var $radio = $('input:radio[name="nameRadioButton"]');
$radio.addClass("validate[required]");

Spero che il mio esempio ti possa aiutare


2

Ho avuto lo stesso problema. Completa la scrittura di una funzione di evidenziazione personalizzata e di non evidenziazione per il validatore. Aggiungendo questo alle opzioni validaton si dovrebbe aggiungere la classe di errore all'elemento e la sua rispettiva etichetta:

        'highlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").addClass(errorClass);
                    $(this).addClass(errorClass);
                });
            } else {
                $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
                $(element).addClass(errorClass);
            }
        },
        'unhighlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").removeClass(errorClass);
                    $(this).removeClass(errorClass);
                });
            }else {
                $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
                $(element).removeClass(errorClass);
            }
        },

2

codice per pulsante di opzione -

<div>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Female",false) Female</span>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Male",false) Male</span>                                                        
<div class='GenderValidation' style="color:#ee8929;"></div>    
</div> 

<input class="btn btn-primary" type="submit" value="Create" id="create"/>

e codice jQuery-

<script>
    $(document).ready(function () {
        $('#create').click(function(){

            var gender=$('#Gender').val();
            if ($("#Gender:checked").length == 0){
                $('.GenderValidation').text("Gender is required.");
                return false;
            }
        });
    });
</script>

0

Mette il messaggio di errore in cima.

   <style> 

 .radio-group{ 
      position:relative; margin-top:40px; 
 } 

 #myoptions-error{ 
     position:absolute; 
     top: -25px; 
  } 

 </style> 

 <div class="radio-group"> 
 <input type="radio" name="myoptions" value="blue" class="required"> Blue<br /> 
 <input type="radio" name="myoptions" value="red"> Red<br /> 
 <input type="radio" name="myoptions" value="green"> Green </div>
 </div><!-- end radio-group -->
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.