web-dev-qa-db-fra.com

jQuery Validate Required Select

J'essaie de valider l'élément select html à l'aide du plugin jQuery Validate. J'ai défini la règle "requis" sur true, mais la validation est toujours réussie, car l'indice zéro est choisi par défaut. Est-il possible de définir une valeur vide utilisée par la règle requise?

UPD. Exemple. Imaginez que nous ayons le contrôle html suivant:

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

Je veux que le plugin Validation utilise la valeur "default" comme vide.

140
SiberianGuy

Vous pouvez écrire votre propre règle!

 // 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!" }
  }  
 });
208
JMP

Une solution plus simple a été décrite ici: Valider la case à cocher

Faites en sorte que la valeur soit vide et ajoutez l'attribut requis

<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>
235
Andrew Coats

la solution la plus simple

il suffit de définir la valeur de la première option sur la chaîne vide value=""

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

et validation de requêterequired règle will work

39
Basheer AL-MOMANI

utiliser la règle min

définir la valeur de la première option sur 0

'selectName':{min:1}
30
Funky Dude

Il vous suffit de mettre validate[required] en tant que classe de cette sélection, puis de placer une option avec value = ""

par exemple:

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

Je ne sais pas comment était le plugin à l'époque où la question a été posée (2010), mais j'ai rencontré le même problème aujourd'hui et l'ai résolu de cette façon:

  1. Donnez à votre balise select un attribut de nom. Par exemple dans ce cas

    <select name="myselect">

  2. Au lieu d'utiliser l'attribut value = "default" dans l'option de balise, désactivez l'option par défaut ou définissez valeur = "" comme suggéré par Andrew Coats.

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

    ou

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

  3. Définir la règle de validation du plugin

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

    ou

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

Obs: La solution d'Andrew Coats ne fonctionne que si vous n'avez qu'un seul choix dans votre formulaire. Si vous souhaitez que sa solution fonctionne avec plusieurs sélections, ajoutez un attribut de nom à votre sélection.

J'espère que ça aide! :)

Voici l'exemple simple et compréhensible:

   <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 $
4
fthopkins
<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>

sélectionnez la valeur sera vide

2
abhishek kumar

La solution mentionnée par @JMP a fonctionné dans mon cas avec une petite modification: j'utilise element.value au lieu de value dans le 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!" }
    }  
});

Il est possible que j’ai un cas particulier ici, mais je n’en ai pas découvert la cause. Mais la solution de @ JMP devrait fonctionner dans des cas normaux.

1
Legends

comment valider le select "qualifica" il a 3 choisissez

$(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;
        }
    });

});
0
michele

C'est simple, vous devez obtenir la valeur du champ Select et il ne peut pas s'agir de "valeur par défaut".

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