2010-11-05 6 views
35

J'essaye de déterminer si une zone de texte est vide si un utilisateur supprime ce qui est déjà pré-rempli dans la zone de texte en utilisant jQuery.jQuery détecter si textarea est vide

Quoi qu'il en soit?

C'est ce que je l'ai et sa ne fonctionne pas

$(textarea).live('change', function(){ 
      if($(this).val().length == 0) { 
       $(submitButtonClass).addClass('disabled_button'); 
       $(submitButtonClass).removeClass('transSubmit'); 
      } else { 
       $('.disabled_button').addClass('transSubmit').css({ 
        'cursor':'pointer' 
       }).removeClass('disabled_button'); 
      } 
     }); 
+0

est-ce que 'textarea' est un nom de variable réel dans votre code ou avez-vous oublié de l'envelopper dans des délimiteurs de chaîne? par exemple. '$ (" textarea "). live (...)'. Ce que vous avez devrait fonctionner, sinon. Avez-vous des erreurs? –

+0

'textarea' est un nom de variable. Et je ne reçois aucune erreur ... J'ai presque besoin de lier l'événement keydown à la zone de texte – dennismonsewicz

+0

si 'textarea' n'est pas un sélecteur, vous devriez utiliser' bind' plutôt que 'live'. Voir http://api.jquery.com/live/#caveats –

Répondre

2

Vous avez juste besoin d'obtenir la valeur de la TexBox et voir si elle a quelque chose en elle:

if (!$(`#textareaid`).val().length) 
{ 
    //do stuff 
} 
+1

'.length' est un nombre, pas une fonction. –

+0

Est-ce que val() trim? Sinon, je couperais l'espace blanc de fin juste au cas où. –

+0

thx, typo ... corrigé. –

83
if (!$("#myTextArea").val()) { 
    // textarea is empty 
} 

Vous Vous pouvez également utiliser $.trim pour vous assurer que l'élément ne contient pas uniquement des espaces:

if (!$.trim($("#myTextArea").val())) { 
    // textarea is empty or contains only white-space 
} 
+3

fonctionne dans firefox, ne fonctionne pas en chrome – PUG

+0

@jaminator: fonctionne très bien pour moi, il n'y a pas de code incompatible. Si vous l'avez essayé et que cela ne fonctionne pas, il est probable que le problème se situe ailleurs dans votre code. –

+0

travail dosent sur le chrome. – Dementic

0

Pour savoir si la zone de texte est vide, nous examinons le contenu du texte de la zone de texte et si un caractère sinlge est trouvé, il n'est pas vide.

Essayez:

if ($(#textareaid).get(0).textContent.length == 0){ 
    // action 
} 
//or 
if (document.getElmentById(textareaid).textContent.length == 0){ 
    // action 
} 

$(#textareaid) nous obtient l'objet jQuery textarea. $(#textareaid).get(0) nous obtient le nœud dom. Nous pourrions également utiliser document.getElmentById(textareaid) sans l'utilisation de jQuery. .textContent nous obtient le textContent de cet élément dom. Avec .length nous pouvons voir s'il y a des caractères présents. Donc, la zone de texte est vide dans le cas où il n'y a pas de caractères à l'intérieur.

+0

.text() n'est pas une fonction – mghaoui

+0

@mghaoui: thx, corrigé – Thariama

+0

Pourriez-vous s'il vous plaît [modifier] dans une explication de pourquoi ce code répond la question? Les réponses au code seulement sont découragées, car elles n'enseignent pas la solution. – Scimonster

1

Voici mon code de travail

function emptyTextAreaCheck(textarea, submitButtonClass) { 
     if(!submitButtonClass) 
      submitButtonClass = ".transSubmit"; 

      if($(textarea).val() == '') { 
       $(submitButtonClass).addClass('disabled_button'); 
       $(submitButtonClass).removeClass('transSubmit'); 
      } 

     $(textarea).live('focus keydown keyup', function(){ 
      if($(this).val().length == 0) { 
       $(submitButtonClass).addClass('disabled_button'); 
       $(submitButtonClass).removeClass('transSubmit'); 
      } else { 
       $('.disabled_button').addClass('transSubmit').css({ 
        'cursor':'pointer' 
       }).removeClass('disabled_button'); 
      } 
     }); 
    } 
+1

Ne pas attraper coller, couper, déposer, etc. Essayez [mon plugin] (http://whattheheadsaid.com/projects/input-special-event) pour une meilleure solution. –

+0

Merci pour l'aide suggestion homme! Je vais regarder dans ce plugin ... ressemble à une bien meilleure solution que ce que je fais – dennismonsewicz

+0

Le lien @AndyE fourni est mort. –

0

Andy E de réponse m'a aidé à obtenir la bonne façon de travailler pour moi:

$.each(["input[type=text][value=]", "textarea"], function (index, element) { 
if (!$(element).val() || !$(element).text()) { 
$(element).css("background-color", "rgba(255,227,3, 0.2)"); 
} 
}); 

Ce !$(element).val() n'a pas attrapé un textarea vide pour moi. mais cette chose entière (!) a fonctionné une fois combinée avec le texte.

0
$.each(["input[type=text][value=]", "textarea[value=]"], function (index, element) { 
       //only empty input and textarea will come here 
}); 
+0

textarea [value =] ne fonctionne pas pour moi (chrome) –

3

Je sais que vous êtes passé depuis longtemps obtenir une solution. Donc, c'est pour les autres qui viennent voir comment les autres résolvent le même problème commun - comme moi.

Les exemples dans la question et les réponses indiquent l'utilisation de jQuery et j'utilise le .change listener/handler/whatever pour voir si ma zone de texte change. Cela devrait prendre soin des changements de texte manuel, les changements de texte automatisés, etc. pour déclencher le

//pseudocode 
$(document).ready(function() { 
    $('#textarea').change(function() { 
     if ($.trim($('#textarea').val()).length < 1) { 

      $('#output').html('Someway your box is being reported as empty... sadness.'); 

     } else { 

      $('#output').html('Your users managed to put something in the box!'); 
      //No guarantee it isn't mindless gibberish, sorry. 

     } 
    }); 
}); 

semble fonctionner sur tous les navigateurs que j'utilise. http://jsfiddle.net/Q3LW6/

plus récent, plus complet exemple:https://jsfiddle.net/BradChesney79/tjj6338a/

utilisations et rapports .Modification(), .blur(), .keydown(), .keyup(), .mousedown(), .mouseup() , .click(), mouseleave() et .setInterval().

0
if(!$('element').val()) { 
    // code 
} 
Questions connexes