2009-12-06 8 views
417

J'ai un formulaire que je voudrais remplir tous les champs. Si un champ est cliqué et n'est pas rempli, je voudrais afficher un fond rouge.Vérifiez si les entrées sont vides en utilisant jQuery

Voici mon code:

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

Il applique la classe d'avertissement quel que soit le champ étant rempli ou non.

Qu'est-ce que je fais mal?

+1

[** La pseudo-classe vide représente tout élément qui n'a pas d'enfants ** du tout. Seuls les nœuds d'élément et le texte (y compris les espaces) sont pris en compte. Les commentaires ou les instructions de traitement n'affectent pas si un élément est considéré vide ou non.] (Https://developer.mozilla.org/en/docs/Web/CSS/:empty) –

Répondre

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

Et vous ne devez pas nécessairement .length ou voir si elle est >0 depuis une chaîne vide est fausse de toute façon, mais si vous souhaitez pour des raisons de lisibilité:

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

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

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

Aussi, vous devez prendre note que $('input:text') saisit plusieurs éléments, spécifiez un contexte ou utiliser le mot-clé this si vous voulez juste une référence à un élément seul (à condition qu'il y a un TextField descendants/enfants du contexte).

+1

Je pense que cela fonctionnera mieux si vous changez de: if (! $ (this) .val()) à: if (! $ (this) .val() && $ (this) .val()! = "") – alfasin

+1

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

+2

YourObjNameSpace.yourJqueryInputElement.keyup (function (e) { \t if ($. trim ($ (this) .val())) {// \t \t valeur parés est la vérité \t} else { \t \t // La valeur rognée est falsey \t} } –

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

TypeError non intercepté: Impossible de lire la propriété 'length' de undefined –

3

Le pseudo-sélecteur :empty est utilisé pour voir si un élément ne contient pas Childs, vous devriez vérifier la valeur:

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

Pensez à utiliser the jQuery validation plugin à la place. Il est peut-être un peu exagéré pour les champs obligatoires, mais il est suffisamment mature pour gérer les bords que vous n'avez même pas encore imaginés (et aucun d'entre nous ne le devinera).

Vous pouvez marquer les champs obligatoires avec une classe de "requis", exécuter un $ ('formulaire'). Validate() dans $ (document) .ready() et c'est tout ce qu'il faut.

Il est même hébergé sur la livraison Microsoft CDN aussi, pour rapide: http://www.asp.net/ajaxlibrary/CDN.ashx

134

Tout le monde a la bonne idée, mais je veux être un peu plus explicite et 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, une entrée de « 0 » peut obtenir marqué comme mauvais, et une entrée de 5 places pourrait obtenir marqué comme correct sans .trim $. Bonne chance.

+13

Absolument correct.Le découpage est nécessaire, en particulier lorsque vous utilisez des éditeurs WYSIWYG finicky (comme jWYSIWYG, par exemple). –

+0

Puis-je suggérer de changer la valeur en val ---> if (! $. Trim (this.val) .length) {// chaîne de longueur zéro APRÈS un ajustement $ (this) .parents ('p'). AddClass ('Attention'); –

+0

'this.val' serait' undefined' là. Il faudrait que ce soit '$ (this) .val()' - mais il n'y a pas d'avantage entre les navigateurs, donc je l'ai omis par souci de brièveté/rapidité. –

0

Vous pouvez essayer quelque chose comme ceci:

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

Il appliquera événement .blur() uniquement aux entrées avec des valeurs vides.

3

Il y a une autre chose que vous pourriez vouloir penser, Actuellement il peut seulement ajouter la classe d'avertissement si elle est vide, comment enlever la classe encore quand le formulaire n'est plus vide.

comme ceci:

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

faire sur le flou est trop limité. Il suppose qu'il y avait un accent sur le champ de formulaire, donc je préfère le faire sur soumettre, et mapper à travers l'entrée. Après des années de traitement de flou, de mise au point, d'astuces, etc., le fait de simplifier les choses donnera plus de facilité d'utilisation 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..  
}); 
0
<script type="text/javascript"> 
$('input:text, input:password, textarea').blur(function() 
    { 
      var check = $(this).val(); 
      if(check == '') 
      { 
       $(this).parent().addClass('ym-error'); 
      } 
      else 
      { 
       $(this).parent().removeClass('ym-error'); 
      } 
    }); 
</script>// :) 
+0

Vous avez probablement besoin de réduire également les espaces. – Raptor

8

comment se fait personne n'a mentionné

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

semble plus Avec HTML 5, nous pouvons utiliser une nouvelle fonctionnalité jquery semblable me

+3

Cela ne fonctionne pas dans jQuery 1.9+ car ils ont changé le fonctionnement du filtre sélecteur. Http://jsfiddle.net/6r3Rk/ – Wick

+2

Je suggère $ (this) .not ('[value]'). AddClass (' warning ') pour 1.9 http://jsfiddle.net/znZ9e/ –

+1

Je crois que seulement teste si le champ a commencé avec un attribut de valeur. Il ne teste pas la valeur réelle du champ de formulaire comme vous le souhaitez pour la validation. http://jsfiddle.net/T89bS/ ... le champ sans attribut de valeur est giflé avec du saumon, peu importe si vous y tapez quelque chose. – Wick

0

"nécessaire" le juste ajouter à la tag que vous souhaitez utiliser:

<input type='text' required>

+1

OP demande jQuery – Raptor

+2

Et tous les navigateurs ne supportent pas cela ... Vous devez ajouter une vérification js ET une vérification côté serveur –

+0

Titre de la question, "Vérifiez si les entrées sont vides en utilisant jQuery" – JoshYates1980

2

Voici un exemple d'utilisation du code pour l'entrée sélectionnée. Il utilise également un ajustement pour s'assurer qu'une séquence de caractères d'espace blanc ne déclenche pas une réponse véridique. Ceci est un exemple qui peut être utilisé pour commencer une boîte de recherche ou quelque chose lié à ce type de fonctionnalité.

YourObjNameSpace.yourJqueryInputElement.keyup(function (e){ 
    if($.trim($(this).val())){ 
     // trimmed value is truthy meaning real characters are entered 
    }else{ 
     // trimmed value is falsey meaning empty input excluding just whitespace characters 
    } 
} 
2
$(function() { 
    var fields = $('#search_form').serializeArray(); 
    is_blank = true; 
    for (var i = 0; i < fields.length; i++) { 
    // excluded fields 
    if ((fields[i].name != "locale") && (fields[i].name != "utf8")) { 
     if (fields[i].value) { 
     is_blank = false; 
     } 
    } 
    } 
    if (is_blank) { 
    $('#filters-button').append(': OFF'); 
    } 
    else { 
    $('#filters-button').append(': ON'); 
    } 
}); 

Vérifiez si tous les champs sont vides et append ON ou OFF sur Filter_button

3

function checkForm() { 
 
    return $('input[type=text]').filter(function() { 
 
    return $(this).val().length === 0; 
 
    }).length; 
 
}

7

vous pouvez également utiliser ..

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

si vous avez le doute sur les espaces, essayez ..

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

upvoted pour les garnitures – pun

2

L'événement keyup détecte si l'utilisateur a autorisé la boîte et (à savoir backspace soulève l'événement mais le retour arrière ne déclenche pas l'événement keypress dans IE)

$("#inputname").keyup(function() { 

if (!this.value) { 
    alert('The box is empty'); 
}}); 
Questions connexes