Comment puis-je vérifier les valeurs vides des champs d'entrée (required
) dans une section, puis leur ajouter une classe lors d'un événement, à l'aide de jQuery? Jusqu'à présent, j'ai essayé:
jQuery("#sender_container input.required").val("").addClass("error");
Mais cela sembleDÉFINIRla valeur, plutôt que de la vérifier. Des idées?
jQuery("#sender_container input.required").filter(function() {
return !this.value;
}).addClass("error");
Pourquoi vous devez utiliser filter
et non [value=""]
, vous pouvez voir dans this DEMO
La raison en est que: les sélecteurs d'attributs vérifient l'état initial de l'élément, pas l'état actuel. (notez que vous pouvez changer l'état "initial" avec la fonction attr
, mais c'est une mauvaise pratique, vous devriez toujours utiliser prop
)
Donc, si vous modifiez la valeur d'entrée, la valeur actuelle n'aura pas d'effet sur le sélecteur d'attribut. pas sage ... :)
Remarques:
.val()
renvoie la valeur de l'élément de formulaire et rompt la chaîne jQuery, $('selector').val().addClass('foo')
Error, la valeur renvoyée est une chaîne \ nombre
.val(valueToSet)
définit la valeur de l'élément de formulaire et ne rompt pas la chaîne jQuery.$('selector').val("some value").addClass('foo')
- Valid, la valeur renvoyée est un jQuery
$('input:text[value=]','#sender_container').addClass('error');
$('#sender_container input.required[value=""]').addClass('error')
jQuery('#sender_container input.required[value=""]').addClass("error");
Vous pouvez essayer ceci:
$('input:not([value!=""])').addClass('error');
Remarque: Cette réponse ne doit pas être utilisée, et la seule raison pour laquelle elle n'a pas été supprimée est son apprentissage.
Si vous devez uniquement sélectionner en fonction de la valeur d'attribut initiale de l'entrée, procédez comme suit:
var elements = $('#sender_container input.required[value=""]')
Mais sachez que cela ne fonctionnera pas si l'attribut value
n'est pas présent. Cela ne fonctionnera pas non plus pour la valeur d'entrée actuelle si elle a été modifiée par l'utilisateur ou le script.
Si vous souhaitez obtenir la valeur d'entrée actuelle, vous pouvez utiliser jquery ' filter
function:
var elements = $('#sender_container input.required').filter(function() {
return this.value === '';
// alternatively for "no value":
// return !this.value;
})
Après avoir sélectionné les éléments jquery, vous pouvez ajouter votre classe:
elements.addClass('error');
Pour ceux input.required ne fonctionne pas, écrivez comme suit:
jQuery('#sender_container input[required]').val("").addClass("error");
obtenir tous les champs inspectés cela pourrait aider.
$('#sender_container [required]').each(function(index)
{
if (!($(this).val())) $(this).addClass('error');
}
});
$field = $("#sender_container input.required");
if( ! $field.val())
{
$field.addClass("error");
}
cette façon simple peut fonctionner.