546 votes

Vérifier si les entrées sont vides en utilisant jQuery

J'ai un formulaire dont je voudrais que tous les champs soient remplis. Si l'on clique sur un champ et qu'il n'est pas rempli, j'aimerais afficher un fond rouge.

Voici mon code :

$('#apply-form input').blur(function () {
  if ($('input:text').is(":empty")) {
    $(this).parents('p').addClass('warning');
  }
});

Il applique la classe d'avertissement, que le champ soit rempli ou non.

Qu'est-ce que je fais de mal ?

859voto

meder Points 81864
$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    }
});

Et vous n'avez pas nécessairement besoin .length ou voir si c'est >0 puisqu'une chaîne vide est évaluée à false de toute façon, mais si vous le souhaitez, pour des raisons de lisibilité :

$('#apply-form input').blur(function()
{
    if( $(this).val().length === 0 ) {
        $(this).parents('p').addClass('warning');
    }
});

Si vous êtes sûr qu'il fonctionnera toujours sur un élément de type champ de texte, vous pouvez simplement utiliser this.value .

$('#apply-form input').blur(function()
{
      if( !this.value ) {
            $(this).parents('p').addClass('warning');
      }
});

Vous devez également prendre note que $('input:text') saisit plusieurs éléments, spécifie un contexte ou utilise la commande this si vous voulez juste une référence à un élément unique (à condition qu'il y ait un champ de texte dans les descendants/enfants du contexte).

2 votes

$(this).val().length < 1

3 votes

YourObjNameSpace.yourJqueryInputElement.keyup(function (e){ if($.trim($(this).val())){ // la valeur rognée est vraie }else{ // la valeur rognée est fausse } }. }

0 votes

Je valide la longueur des champs si rarement que j'ai complètement négligé .val().length et utilisait à la place .length() sur l'élément lui-même.

164voto

Alex Sexton Points 7635

Tout le monde a la bonne idée, mais j'aime être un peu plus explicite et découper les valeurs.

$('#apply-form input').blur(function() {
     if(!$.trim(this.value).length) { // zero-length string AFTER a trim
            $(this).parents('p').addClass('warning');
     }
});

Si vous n'utilisez pas .length , alors une entrée de '0' peut être signalée comme mauvaise, et une entrée de 5 espaces pourrait être marquée comme correcte sans le $.trim . Bonne chance.

19 votes

Tout à fait exact. L'élagage est nécessaire, surtout lorsqu'on utilise des éditeurs WYSIWYG pointilleux (comme jWYSIWYG, par exemple).

0 votes

Puis-je suggérer de remplacer la valeur par val ---> if(!$.trim(this.val).length) { // chaîne de longueur nulle APRÈS une coupe $(this).parents('p').addClass('warning') ; }

0 votes

this.val serait undefined là. Il faudrait que ce soit $(this).val() - mais cela ne présente aucun avantage pour les navigateurs, aussi je l'ai laissé de côté pour des raisons de brièveté et de rapidité.

37voto

drewdeal Points 171

Le faire sur le flou est trop limité. Cela suppose qu'il y a eu une mise au point sur le champ du formulaire, donc je préfère le faire sur submit, et faire une cartographie de l'entrée. Après des années de manipulation d'astuces fantaisistes de flou, de mise au point, etc., garder les choses plus simples donnera plus de convivialité là où cela compte.

$('#signupform').submit(function() {
    var errors = 0;
    $("#signupform :input").map(function(){
         if( !$(this).val() ) {
              $(this).parents('td').addClass('warning');
              errors++;
        } else if ($(this).val()) {
              $(this).parents('td').removeClass('warning');
        }   
    });
    if(errors > 0){
        $('#errorwarn').text("All fields are required");
        return false;
    }
    // do the ajax..    
});

24voto

Graviton Points 28358
if ($('input:text').val().length == 0) {
      $(this).parents('p').addClass('warning');
}

0 votes

Erreur de Type Non Rattrapée : Impossible de lire la propriété 'length' d'undefined.

0 votes

@ChuckD J'ai eu la même erreur et j'ai compris qu'il me manquait $ sur if (('input:text').val().length == 0) { il devrait l'être if ($('input:text').val().length == 0) {

9voto

Jamie Pate Points 470

Comment se fait-il que personne n'ait mentionné

$(this).filter('[value=]').addClass('warning');

me semble plus proche de Jquery

3 votes

Cela ne fonctionne pas dans jQuery 1.9+, car ils ont changé la façon dont le filtre de sélection fonctionne. jsfiddle.net/6r3Rk

3 votes

Je suggère $(this).not('[value]').addClass('warning') pour la 1.9 jsfiddle.net/znZ9e

1 votes

Je crois que cela ne fait que tester si le champ a commencé avec un attribut de valeur. Il ne teste pas la valeur réelle du champ du formulaire comme vous en auriez besoin pour la validation. jsfiddle.net/T89bS ... le champ sans attribut de valeur est frappé par le saumon, même si vous tapez quelque chose dedans.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X