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 */ }
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");
Essayez jQuery each ()
$('input[type=text]').each(function(){
var text_value=$(this).val();
if(text_value!='')
{
console.log('Value exist');
}
})
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="">
Il suffit d'utiliser ceci:
if (!$("#id").val().length == 0))
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
});
});