web-dev-qa-db-fra.com

jQuery vérifie si une entrée de texte a une valeur

Je veux demander s'il existe un meilleur moyen dans jQuery de sélectionner plusieurs entrées de texte, puis de vérifier si l'un d'entre eux a une valeur. Voici mon code: 

if ($("#reference").val() != "" || $("#pin").val() != "" || $("#fName").val() != "" || $("#mName").val() != "" || $("#datepicker").val() != "") { /*logic goes here */ }
23
dilm

Vous pourriez faire comme ci-dessous:

if ($("#reference,#pin,#fName,#mName,#datepicker").filter(function() { return $(this).val(); }).length > 0) {
  //..
}

Utiliser une fonction commune comme celle-ci la rendrait réutilisable:

function hasValue(elem) {
    return $(elem).filter(function() { return $(this).val(); }).length > 0;
}

Et vous pourriez l'appeler comme ça:

hasValue("#my-input-id");
50
xdazz

Essayez jQuery each ()

 $('input[type=text]').each(function(){
     var text_value=$(this).val();
     if(text_value!='')
       {
        console.log('Value exist');
        }

   })
10
Shijin

Le problème avec l'obtention de la propriété length sur filter() est que jQuery évaluera chaque élément de la collection, il suffit de renseigner un nombre lorsque la seule chose qui compte est de savoir si la valeur est supérieure à zéro.

Aucune des réponses actuelles et même la fonction .is() , .has() , et .filter() de jQuery ne fait appel au court-circuit dès que les critères sont remplis.

Vous pouvez définir une méthode d'extension simple appelée .any() comme ceci: 

jQuery.fn.any = function(filter){ 
    for (i=0 ; i<this.length ; i++) {
     if (filter.call(this[i])) return true;
  }
  return false;
};

Et passez ensuite une fonction de filtrage comme celle-ci:

var someInputsEmpty = $("#reference,#pin,#fName,#mName,#datepicker").any(function() { 
    return this.value == '';
});

jQuery.fn.any = function(filter){ 
	for (i=0 ; i<this.length ; i++) {
  	 if (filter.call(this[i])) return true;
  }
  return false;
};

$(function() {
	
  var gotMatch = $(":input").any(function() { 
                   return this.value == 'hi';
                 });

  if (gotMatch) {
    console.log("Hello to you too!");
  } else {
  	console.log("Why don't you say Hi!");
  }
  
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="text" value="">
<input type="text" value="">
<input type="text" value="">

Lectures complémentaires:

2
KyleMit

Il suffit d'utiliser ceci:

if (!$("#id").val().length == 0))
1
Rajesh Patel

Que diriez-vous:

http://jsfiddle.net/lollero/rr2ss/1/

Autre exemple: http://jsfiddle.net/lollero/rr2ss/12/

$(function() {

    // Check value of each and every input element....
    // Which you can of course change to be more specific, like: $('#myForm input')
    $( "input" ).val(function( i, val ) {

        // Return the console log IF value is not empty
        // value=" " still counts as "not empty", because technically it isn't
        // You could of course replace the console.log(); with anything you'd like
        val && console.log('not empty: input-' + (++i) );

        // Note that you don't have to return val if you don't  want to, it's just for show in this case.
        return val

    });

});
0
Joonas