web-dev-qa-db-fra.com

jQuery: come filtrare le chiavi non di caratteri sull'evento

Il n'y a pas de mots-clés à ce sujet.

Vous avez déjà besoin d’utiliser l’événement en appuyant sur une touche de test de la mémoire, il ya beaucoup de choses à faire.Enter,ESC, saveurs freccia,backspace,tab,ctrl,insert,F1-F12, ecc.) dall'avvio Dell'evento.

C'è un modo modèle pour déterminer vous-même?

37
twig

La risposta selezionata pour la question est complète. Non gestisce il en cui un savo carattere viene premuto in combinazione with un savo modificatore (ad es.CTRL-A).

Prova, ad esempio, un digitareCTRL-Ausando firefox avec le codice seguente. Risque attendu pour ce qui est venu un personnage:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>

JavaScript:

$("input").keypress(function (e) {
    if (e.which !== 0) {
        alert(String.fromCharCode(e.which));
    }
});

http://jsfiddle.net/4jx7v/

Note: non-généré par un navigateur, même si vous utilisez un navigateur (venez Chrome), un lecteur non-disponible pour une dégustation parfaite.

Una soluzione migliore potrebbe essere:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>

JavaScript:

$("input").keypress(function (e) {
    if (e.which !== 0 &&
        !e.ctrlKey && !e.metaKey && !e.altKey
    ) {
        alert(String.fromCharCode(e.which));
    }
});

http://jsfiddle.net/hY5f4/

Dans le cas présent, l'avviso viene attivo solo quandAè premuto, nonCTRL-Apar navigateur i.

27
Daniel
<script>
    $("input").keypress(function (e) {
        if (e.which !== 0 &&
            !e.ctrlKey && !e.metaKey && !e.altKey) {
            alert(String.fromCharCode(e.which));
        }
    });
</script>

Semble fonctionner parfaitement avec jQuery 1.4.2, FF, IE, Chrome.

Pour vous plonger dans le fouillis qu'est la gestion d'événements clavier JS, voir: JavaScript Madness: Keyboard Events


Mise à jour pour filtrer les combinaisons de touches Ctrl, Méta et Alt selon Commentaire de Daniel .

27
Andras Vass

Vérifier les combinaisons de touches ne sera pas la meilleure solution dans tous les cas ... Par exemple, si vous utilisez une combinaison de touches pour taper un caractère, cela bloquera l'événement onkeypress, alors que ce ne devrait pas être le cas.

Essayez cela ici et vous verrez que cela ne fonctionnera pas: http://jsfiddle.net/4jx7v/

(Sur un Mac, essayez alt + une lettre et sous Windows, essayez alt + une série de touches numériques.)

Une alternative à cela serait simplement de vérifier si la valeur d’entrée a changé par rapport à la précédente, de cette façon, vous savez avec certitude que quelque chose a été tapé.

JavaScript:

var previousValue;
$("input").keypress(function (e) {
    if (previousValue != $(this).val()) {
        alert('Something has been typed.');
    }
});
0
Marian