2010-05-11 5 views
0

J'utilise actuellement jQuery pour restreindre une zone de texte au numéro d'entrée seulement comme suit:jQuery - Changer le fond du champ de saisie si le texte se remplace

$('input.numbersOnly').keyup(function() { 
     this.value = this.value.replace(/[^0-9\.]/g,''); 
    }); 

Je voudrais informer l'utilisateur que ce ils sont en train d'être rejetés en changeant la couleur d'arrière-plan du champ. Je sais que je peux changer l'arrière-plan d'un champ en utilisant quelque chose comme ceci:

 $('input.numbersOnly').addClass('alertClass'); 

Ma question est, comment puis-je combiner les deux exemples de code ci-dessus afin que la couleur des changements sur le terrain que le personnage est maintenant remplacé ? Mon but est d'alerter l'utilisateur que quelque chose ne va pas dans sa saisie lorsqu'il le tape sur le terrain.

Merci!

+1

Quand faut-alertClass être retiré? – nickf

+0

Que se passe-t-il lorsque l'utilisateur tape "1234a" (qui est réduit à "1234") et passe ensuite au champ suivant? –

+0

Nickf - Je n'y avais pas beaucoup réfléchi, mais la solution de Nick Craver ci-dessous est assez élégante pour que je l'aime bien, alors je vais de l'avant avec sa suggestion. Salman A - Je l'ai défini de sorte que alertClass soit supprimé lorsque l'utilisateur passe au champ suivant. J'ai utilisé le suivant:. \t \t $ ('entrée') focusout (function() { \t \t \t $ (this) .toggleClass ('alertClass', false); \t \t}); Cela fonctionne bien pour ce dont j'ai besoin. – Yazmin

Répondre

2

Vous pouvez faire quelque chose comme ceci:

$('input.numbersOnly').keyup(function() { 
    var newValue = this.value.replace(/[^0-9\.]/g,''); 
    if(this.value !== newValue) $(this).addClass('alertClass'); 
    this.value = newValue; 
}); 

Cette saisit la nouvelle valeur, détermine si vous remplacez en fait quelque chose, et si ajoute ainsi le alertClass. Si vous voulez supprimer également la classe d'une valeur keyup valide, vous pouvez utiliser .toggleClass(), comme ceci:

$('input.numbersOnly').keyup(function() { 
    var newValue = this.value.replace(/[^0-9\.]/g,''); 
    $(this).toggleClass('alertClass', this.value !== newValue); 
    this.value = newValue; 
}); 

Ce serait basculer la classe avec un keyup invalide, ce qui provoque un ajustement de valeur et togle hors tension si la dernière pression sur une touche était valide, ce qui n'entraînait aucun ajustement.

+0

Merci Nick. C'est exactement ce dont j'avais besoin et vous l'avez expliqué assez bien et lié la documentation de la fonction. J'apprécie cela. – Yazmin

0

Comme ceci:

$('input.numbersOnly').keyup(function() { 
    var oldVal = this.value; 
    this.value = this.value.replace(/[^0-9\.]/g,''); 
    if (oldVal !== this.value) 
     $(this).addClass('alertClass') 
}); 
+0

Merci pour votre réponse. Ce code aurait aussi bien fonctionné. – Yazmin

Questions connexes