Comment identifier les zones de texte vides à l'aide de jQuery? Je voudrais le faire en utilisant des sélecteurs si c'est possible. De plus, je dois sélectionner sur id car dans le code réel où je veux utiliser cela, je ne veux pas sélectionner toutes les entrées de texte.
Dans mes deux exemples de code suivants, le premier affiche avec précision la valeur saisie dans la zone de texte "txt2" par l'utilisateur. Le deuxième exemple indique qu'il y a une zone de texte vide, mais si vous la remplissez, elle la considère toujours comme vide. Pourquoi est-ce?
Cela peut-il être fait en utilisant uniquement des sélecteurs?
Ce code signale la valeur dans la zone de texte "txt2":
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
alert($('[id=txt2]').val());
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
Ce code signale toujours que la zone de texte "txt2" est vide:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
if($('[id^=txt][value=""]').length > 0) {
if (!confirm("Are you sure you want to submit empty fields?")) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
}
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
jquery
css-selectors
Cros
la source
la source
Réponses:
Autrement
ou
ou
Démo de travail
code de la démo
jQuery
la source
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
sélecteur ne fonctionne pas car il ne trouve pas d'attribut de valeur. Toutefois, la technique .filter fonctionne dans ce scénario.Vous pouvez également le faire en définissant votre propre sélecteur:
Et puis accédez-y comme ceci:
la source
?
Au fait, votre appel de:
peut être grandement simplifiée et accélérée avec:
la source
Comme mentionné dans l'article le mieux classé, ce qui suit fonctionne avec le moteur Sizzle.
Dans les commentaires, il a été noté que la suppression de la
:text
partie du sélecteur entraîne l'échec du sélecteur. Je pense que ce qui se passe, c'est que Sizzle s'appuie en fait sur le moteur de sélection intégré du navigateur lorsque cela est possible. Lorsqu'il:text
est ajouté au sélecteur, il devient un sélecteur CSS non standard et doit donc être géré par Sizzle lui-même. Cela signifie que Sizzle vérifie la valeur actuelle de INPUT, au lieu de l'attribut "value" spécifié dans le code HTML source.C'est donc un moyen astucieux de vérifier les champs de texte vides, mais je pense que cela repose sur un comportement propre au moteur Sizzle (celui d'utiliser la valeur actuelle de INPUT au lieu de l'attribut défini dans le code source). Bien que Sizzle puisse renvoyer des éléments qui correspondent à ce sélecteur,
document.querySelectorAll
ne renverra que les éléments qui ontvalue=""
dans le HTML. Caveat emptor.la source
$("input[type=text][value=]")
Après avoir essayé de nombreuses versions, j'ai trouvé que c'était la plus logique.
Notez que
text
c'est sensible à la casse.la source
En me basant sur la réponse de @James Wiseman, j'utilise ceci:
Cela capturera les entrées qui ne contiennent que des espaces en plus de celles qui sont «vraiment» vides.
Exemple: http://jsfiddle.net/e9btdbyn/
la source
Je recommande:
la source
<input value="">
correspondra toujours.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
) parce que Laravel n'ajoute pas d'attribut «valeur» s'il est vide. J'ai donc utilisé:$('input:text:not([value]):visible:enabled:first');
pour trouver le premier champ de saisie de texte activé vide visible.Il y a beaucoup de réponses ici suggérant quelque chose comme
[value=""]
mais je ne pense pas que cela fonctionne réellement. . . ou du moins, l'utilisation n'est pas cohérente. J'essaie de faire quelque chose de similaire, en sélectionnant toutes les entrées avec des identifiants commençant par une certaine chaîne qui n'ont pas non plus de valeur entrée. J'ai essayé ceci:mais ça ne marche pas. Les inverser non plus. Voyez ce violon . Les seuls moyens que j'ai trouvés pour sélectionner correctement toutes les entrées avec des identifiants commençant par une chaîne et sans valeur saisie étaient
et
mais évidemment, les doubles négatifs rendent cela vraiment déroutant. La première réponse de Russ Cam (avec une fonction de filtrage) est probablement la méthode la plus claire.
la source
Cela sélectionnera des entrées de texte vides avec un identifiant commençant par "txt":
la source
Étant donné que la création d'un objet JQuery pour chaque comparaison n'est pas efficace, utilisez simplement:
Ensuite, vous pouvez faire:
la source