Comment puis-je annuler le keydown
d'une touche spécifique du clavier, par exemple (espace, entrée et arrows
) dans une page HTML. Attrapez l'événement keydown et renvoyez false.Annuler le clavier en HTML
Répondre
Si vous n'êtes intéressé que par les exemples clés que vous avez mentionné, l'événement keydown
fera, sauf pour les anciennes versions pré-Blink de Opera (jusqu'à et y compris la version 12, au moins) où vous devrez annuler l'événement keypress
. Il est beaucoup plus facile d'identifier de façon fiable les clés non imprimables dans l'événement keydown
que l'événement keypress
. Par conséquent, une variable doit être définie dans le gestionnaire keydown
pour indiquer au gestionnaire keypress
s'il faut ou non supprimer le comportement par défaut.
var cancelKeypress = false;
document.onkeydown = function(evt) {
evt = evt || window.event;
cancelKeypress = /^(13|32|37|38|39|40)$/.test("" + evt.keyCode);
if (cancelKeypress) {
return false;
}
};
/* For Opera */
document.onkeypress = function(evt) {
if (cancelKeypress) {
return false;
}
};
Il devrait être dans les lignes de:
<script>
document.onkeydown = function(e){
var n = (window.Event) ? e.which : e.keyCode;
if(n==38 || n==40) return false;
}
</script>
Les keycodes sont définies here
modifier: mettre à jour ma réponse à travailler dans IE
'window.captureEvents' est obsolète et a été supprimé des versions plus récentes de Firefox, et n'a jamais pris en charge par d'autres navigateurs. Voir https://developer.mozilla.org/en/DOM/window.captureEvents. –
Cela ne fonctionnera pas dans IE, dans lequel 'e' ne sera pas défini. –
@andy, @tim: vrai, j'ai copié et collé à l'aveuglette. J'ai corrigé ma réponse. Bien sûr, la réponse de @ tim était la plus rapide et la plus précise – marcgg
jQuery a une belle KeyPress function qui vous permet de détecter une pression sur une touche, alors cela devrait être juste un cas de détection de la valeur de clé et d'exécution d'un si pour ceux que vous voulez ignorer.
modifier: par exemple:
$('#target').keypress(function(event) {
if (event.keyCode == '13') {
return false; // or event.preventDefault();
}
});
juste retour faux. Attention, sur Opera cela ne fonctionne pas. Vous pouvez utiliser à la place onkeyup et vérifier le dernier caractère entré et y faire face. Ou mieux d'utilisation JQuery KeyPress
Ceci est certainement un très vieux fil. Afin de faire de la magie avec IE10 et FireFox 29.0.1 vous devez certainement le faire à l'intérieur de keypress
(non keydown
) fonction écouteur d'événement:
if (e.preventDefault) e.preventDefault();
Je ne développent que pour IE parce que mes travaux l'exige, donc il est mon code pour le champ numérique, pas une beauté, mais fonctionne très bien
$(document).ready(function() {
$("input[class='numeric-field']").keydown(function (e) {
if (e.shiftKey == 1) {
return false
}
var code = e.which;
var key;
key = String.fromCharCode(code);
//Keyboard numbers
if (code >= 48 && code <= 57) {
return key;
} //Keypad numbers
else if (code >= 96 && code <= 105) {
return key
} //Negative sign
else if (code == 189 || code == 109) {
var inputID = this.id;
var position = document.getElementById(inputID).selectionStart
if (position == 0) {
return key
}
else {
e.preventDefault()
}
}// Decimal point
else if (code == 110 || code == 190) {
var inputID = this.id;
var position = document.getElementById(inputID).selectionStart
if (position == 0) {
e.preventDefault()
}
else {
return key;
}
}// 37 (Left Arrow), 39 (Right Arrow), 8 (Backspace) , 46 (Delete), 36 (Home), 35 (End)
else if (code == 37 || code == 39 || code == 8 || code == 46 || code == 35 || code == 36) {
return key
}
else {
e.preventDefault()
}
});
});
Upps, ce wast pas le blog de champ numérique, désolé –
+1, j'ai supprimé ma réponse en faveur de celui-ci, je n'étais pas au courant des problèmes d'Opera :-) –
Est-ce que Opera Quirk se tient encore ces jours-ci et les temps? Vous devez toujours annuler en appuyant sur une touche? –
@RobertKoritnik: Je viens de l'essayer et ça ne s'applique pas à la dernière version d'Opera. Je suppose que cela ne s'applique pas à n'importe quelle version d'Opera basée sur Blink. –