2010-05-31 5 views
6

Est-il possible (cross-browser compatible) pour ANNULER une combinaison de touches après qu'un utilisateur a fait (par exemple sur une zone de texte)Annuler une combinaison de touches dans jQuery

Le code que j'utilise actuellement les modifications de la valeur textbox après la combinaison de touches a été affiché:

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

Répondre

4

SOLVED (ET MISE À JOUR)

Excuses, je n'ai pas testé l'option la plus évidente - qui a fonctionné:

$('.number').keypress(function(event) { 
    return /[0-9\.]/.test(String.fromCharCode(event.keyCode)); 
}); 
+1

+1 C'est la manière de le faire si vous ne voulez pas voir brièvement l'entrée interdite. Vous pouvez le nettoyer un peu en utilisant 'test()', comme ceci: '/ [^ 0-9 \.] /. Test (String.fromCharCode (event.keyCode))'. Aucun remplacement ou affectation n'est nécessaire puisque vous faites 'return false;'. Pas besoin non plus de l'identifiant global 'g' puisque vous testez un seul événement clé. – user113716

+0

Merci, j'ai mis à jour ma réponse avec votre suggestion avec un petit changement - enlever le carrat (^) de la regex car cela inverserait le résultat du test :) Très apprécié! – Jimbo

4
$('.number').keypress(function() { 
    if (this.value == 'foobar'){ 
     // "Cancel" keystroke 
     return false; 
    } 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 
+0

Cela ne fonctionnerait pas. Vous devrez tester les valeurs interdites dans 'this.value' en utilisant une expression régulière. Vous testez une correspondance exacte avec l'intégralité de 'this.value' – user113716

+0

En fait, si l'instruction' if() 'renvoyait jamais' true', le 'replace()' ne se déclencherait pas. Puisque vous testez 'this.value', c'est une partie cruciale. – user113716

Questions connexes