2010-06-22 3 views
0

J'essaie d'ajouter une classe d'erreur à une zone de texte d'entrée pour montrer à un utilisateur que son entrée est invalide.
Dans l'événement de changement, je reçois une référence à, ce que je suppose est le champ de saisie et de le stocker dans une variable.
L'appel de addClass sur la variable ne fonctionne pas comme prévu. J'ai firebugged le code et $ textBox est la zone de texte correcte, donc je ne suis pas sûr de ce qui me manque ici. J'ai beaucoup d'entrées qui ont la classe "edit-budget-local" donc je dois cibler la zone de texte modifiée. Merci.jQuery addClass ne fonctionne pas lors de l'ajout à "this" variable objet

$("input.edit-budget-local").change(function() { 

    var $textBox = this; 

    var newValue = $textBox.value; 

    if (newValue.match(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/) == null) { 

     $textBox.addClass("error"); 
    } 


}); 

Répondre

2

Essayez

$textBox = $(this); 

bien qu'il semble y avoir un bug (en termes d'utilisation jQuery) à ln 5 où nouvelleValeur devrait être $textBox.val();

+1

Ce n'est pas un bogue, c'est juste un détail d'implémentation (peut-être pas avec lequel vous êtes d'accord). – R0MANARMY

+0

@ R0MANARMY oui, accepté, mais dans l'implémentation traditionnelle, il retournera une erreur TypeError: Résultat de l'expression 'nouvelleValeur' ​​[indéfini] n'est pas un objet –

+0

Sauf qu'il n'y a pas de types (vraiment) dans JS. et faire quelque chose comme 'myObject.nonExistenValue =" foo "' crée cette valeur et définit sa valeur à '" foo "'. Mieux vaut considérer les objets JS comme des tableaux associatifs que comme des classes. – R0MANARMY

0

Vous devez modifier cette ligne: var $textBox = $(this); donc que vous avez effectivement mis en cache une copie d'un objet jQuery, pas seulement l'entrée.

0

Le "this" renvoyé n'est pas un objet jQuery. Essayez de remplacer la ligne

var $textBox = this; 

avec

var $textBox = $(this); 
+0

Cela ne fonctionnera pas, car l'appel de $ textBox.value échouera car la valeur n'est pas exposée (comme cela) par l'objet jQuery. – R0MANARMY

+0

Cela fonctionnerait, mais puisque 'value' n'est membre d'aucun objet jQuery, deux changements devraient être faits; mine et l'utilisation de la fonction val() au lieu de la propriété 'value' inexistante. –

1

vous avez une erreur ici,

$textBox.addClass("error"); 

essayer comme ça,

$("textBox").addClass("error"); 
1

Cela devrait fonctionner si votre sélecteur et regex est correct

$("input.edit-budget-local").change(function() { 
    var textBox = $(this); 
    var newValue = textBox.val(); 

    if (newValue.match(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/) == null) { 
     textBox.addClass("error"); 
    } 
}); 
Questions connexes