jQuery Convalida richiesta Selezionare


146

Sto cercando di convalidare l'elemento html select usando il plugin jQuery Validate. Ho impostato la regola "obbligatorio" su vero ma passa sempre la convalida perché l'indice zero è scelto per impostazione predefinita. Esiste un modo per definire un valore vuoto utilizzato dalla regola richiesta?

UPD. Esempio. Immagina di avere il seguente controllo html:

<select>
  <option value="default">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

Voglio che il plugin Validation utilizzi il valore "default" come vuoto.


Inserisci un frammento di codice in modo che possiamo aiutarti.
Lee,

Risposte:


213

Puoi scrivere la tua regola!

 // add the rule here
 $.validator.addMethod("valueNotEquals", function(value, element, arg){
  return arg !== value;
 }, "Value must not equal arg.");

 // configure your validation
 $("form").validate({
  rules: {
   SelectName: { valueNotEquals: "default" }
  },
  messages: {
   SelectName: { valueNotEquals: "Please select an item!" }
  }  
 });

1
Puoi testare il testo selezionato invece del valore, in questo modo:$.validator.addMethod("valueNotEquals", function(value, element, arg){ return return arg != jQuery(element).find('option:selected').text(); }, "Value must not equal arg.");
Pablo SG Pacheco

11
Per aiutare i lettori futuri: Dove si dice SelectName, significa il valore dell'attributo name e non il valore dell'attributo id. Questo è un po 'confuso poiché quando si lavora in JS di solito si lavora con l'id e non con il nome. Vedi la documentazione qui : "regole (impostazione predefinita: le regole vengono lette dal markup (classi, attributi, dati)) Tipo: oggetto Coppie chiave / valore che definiscono regole personalizzate. Chiave è il nome di un elemento"
Dror

239

Una soluzione più semplice è stata delineata qui: Convalida la casella di selezione

Rendere il valore vuoto e aggiungere l'attributo richiesto

<select id="select" class="required">
<option value="">Choose an option</option> 
<option value="option1">Option1</option>
<option value="option2">Option2</option>
<option value="option3">Option3</option>
</select>

11
Ma devi dare alla tua opzione un valore vuoto - non sempre possibile o saggia
Muleskinner

4
Questa non dovrebbe essere la risposta accettata perché il poster originale chiede specificamente di usare "regole" che è un'opzione che viene fornita al costruttore valido e non presente nel markup. A volte non hai il lusso di modificare il markup. (E personalmente, preferisco semplicemente non mettere la logica nel markup.)
Mason Houtz,

3
@MasonHoutz è ancora logico nel markup, se la logica prevede value = "" o value = "default"
billrichards


30

usa la regola minima

imposta il primo valore dell'opzione su 0

'selectName':{min:1}

Il primo valore è fisso (esiste una logica di backend rispetto a questo valore)
SiberianGuy

9

Hai solo bisogno di mettere validate[required] come classe di questa selezione e quindi inserire un'opzione con valore = ""

per esempio:

<select class="validate[required]">
  <option value="">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

7

Non so come sia stato il plugin al momento della domanda (2010), ma oggi ho affrontato lo stesso problema e l'ho risolto in questo modo:

  1. Assegna al tuo tag select un attributo name. Ad esempio in questo caso

    <select name="myselect">

  2. Invece di lavorare con l'attributo value = "default" nell'opzione tag, disabilita l'opzione predefinita o imposta value = "" come suggerito da Andrew Coats

    <option disabled="disabled">Choose...</option>

    o

    <option value="">Choose...</option>

  3. Imposta la regola di convalida del plugin

    $( "#YOUR_FORM_ID" ).validate({ rules: { myselect: { required: true } } });

    o

    <select name="myselect" class="required">

Obs: La soluzione di Andrew Coats funziona solo se hai solo una selezione nel tuo modulo. Se vuoi che la sua soluzione funzioni con più di una selezione, aggiungi un attributo name alla tua selezione.

Spero che sia d'aiuto! :)


1
in breve, aggiungi l' requiredattributo al <select>tag e aggiungi l' disabledattributo al primo <option>tag (o quello con l' selectedattributo se ce n'è uno)
Stephen

4

Ecco l'esempio semplice e comprensibile:

   <select class="design" id="sel" name="subject">
        <option value="0">- Please Select -</option>
        <option value="1"> Example1 </option>
        <option value="2"> Example2 </option>
        <option value="3"> Example3 </option>
        <option value="4"> Example4 </option>
   </select>

    <label class="error" id="select_error" style="color:#FC2727"><b> Warning : You have to Select One Item.</b></label><td>

    <input type="submit" name="sub" value="Gönder" class="">

JQuery:

jQuery(function() {  

jQuery('.error').hide(); // Hide Warning Label. 

jQuery("input[name=sub]").on("click", function() {

   var returnvalue;

   if(jQuery("select[name=subject]").val() == 0) {

        jQuery("label#select_error").show(); // show Warning 
        jQuery("select#sel").focus();  // Focus the select box      
        returnvalue=false;   

}

return returnvalue;

});
      });  // you can change jQuery with $

2
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>

 <form id="myform"> 
       <select class="form-control" name="user_type">
        <option value="">Select</option>
        <option value="2">1</option>
        <option value="3">2</option>
        </select>
       </form>


<script>
  $('#myform').validate({ // initialize the plugin
            rules: {
          user_type:{ required: true},
         }
      });
</script>

il valore selezionato sarà vuoto


2
Mentre questo frammento di codice può risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Si prega inoltre di cercare di non riempire il codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni!
Filnor,

1

È semplice, è necessario ottenere il valore del campo Seleziona e non può essere "predefinito".

if($('select').val()=='default'){
    alert('Please, choose an option');
    return false;
}

1

La soluzione menzionata da @JMP ha funzionato nel mio caso con una piccola modifica: io uso element.valueinvece che valuein addmethod.

$.validator.addMethod("valueNotEquals", function(value, element, arg){
    // I use element.value instead value here, value parameter was always null
    return arg != element.value; 
}, "Value must not equal arg.");

// configure your validation
$("form").validate({
    rules: {
        SelectName: { valueNotEquals: "0" }
    },
    messages: {
        SelectName: { valueNotEquals: "Please select an item!" }
    }  
});

Potrebbe essere possibile che io abbia un caso speciale qui, ma non ho rintracciato la causa. Ma la soluzione di @ JMP dovrebbe funzionare in casi regolari.


0

come convalidare la selezione "qualifica" che ha 3 scegliere

$(document).ready(function(){

    $('.validateForm').validate({
        rules: {
            fullname: 'required',
            ragionesociale: 'required',
            partitaiva: 'required',
            recapitotelefonico: 'required',
            qualifica: 'required',
            email: {
                required: true,
                email: true
            },
        },
        submitHandler: function(form) {

            var fullname = $('#fullname').val(),
                            ragionesociale = $('#ragionesociale').val(),
                            partitaiva = $('#partitaiva').val(),
                            email = $('#email').val(),
                            recapitotelefonico = $('#recapitotelefonico').val(),
                            qualifica = $('#qualifica').val(),
                            dataString = 'fullname=' + fullname + '&ragionesociale=' + ragionesociale + '&partitaiva=' + partitaiva + '&email=' + email + '&recapitotelefonico=' + recapitotelefonico + '&qualifica=' + qualifica;

            $.ajax({
                type: "POST",
                url: "util/sender.php",
                data: dataString,
                success: function() {

                    window.location.replace("./thank-you-page.php");


                }
            });
            return false;
        }
    });

});

3
Benvenuto in Stack Overflow! Grazie per questo frammento di codice, che potrebbe fornire un aiuto limitato a breve termine. Una spiegazione adeguata migliorerebbe notevolmente il suo valore a lungo termine mostrando perché questa è una buona soluzione al problema e lo renderebbe più utile ai futuri lettori con altre domande simili. Si prega di modificare la risposta di aggiungere qualche spiegazione, tra le ipotesi che hai fatto.
Toby Speight,
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.