J'ai un bouton et la routine de javascript suivante.
$("button").keydown( function(key) { switch(key.keyCode) { case 32: //space return false; } } );
Comme je l'ai compris, le return false;
Arrêterait le contrôle de la touche en cours de traitement. Donc, $("button").click();
Ne serait pas appelé. Pour d'autres codes clés, cela fonctionne comme prévu. Par exemple, si j'intercepte 40
, qui est le bouton bas, la page ne défile pas.
J'ai remarqué ce comportement dans Firefox.
Pourquoi le return false;
N'arrête pas l'événement de clic de bouton sur l'espace? Qu'est-ce que la spécification javascript dit à propos de cela?
J'espère que ça répond à ta question:
<input type="button" value="Press" onkeydown="doOtherStuff(); return false;">
return false;
Annule avec succès un événement sur les navigateurs s'il est appelé à la fin d'un attribut de gestionnaire d'événements dans le HTML. Ce comportement n'est pas formellement spécifié autant que je le sais.
Si vous placez plutôt un événement via une propriété de gestionnaire d'événement sur l'élément DOM (par exemple, button.onkeydown = function(evt) {...}
) ou en utilisant addEventListener
/ attachEvent
(par exemple, button.addEventListener("keydown", function(evt) {...}, false)
) alors tout simplement renvoyer un false
de cette fonction ne fonctionne pas dans tous les navigateurs et vous devez faire les returnValue
et preventDefault()
de mon autre réponse. preventDefault
est spécifié dans la spécification DOM 2 et est implémenté par la plupart des navigateurs modernes traditionnels. returnValue
est spécifique à IE.
Tout d'abord, si vous détectez un caractère imprimable tel que l'espace, vous seriez mieux avec l'événement de la keypress
. Deuxièmement, la façon d'empêcher l'action par défaut est d'appeler preventDefault()
sur l'événement dans des navigateurs non IE et de définir la propriété returnValue
l'événement sur false
dans IE.
var button = document.getElementById("button"); button.onkeypress = function(evt) { evt = evt || window.event; var charCode = evt.keyCode || evt.which; if (charCode == 32) { if (evt.preventDefault) { evt.preventDefault(); } else { evt.returnValue = false; } } };
Je ne suis pas un expert jQuery et je suppose qu'il prend soin d'obtenir l'événement pour vous:
$("button").keypress(function(evt) { var charCode = evt.keyCode || evt.which; if (charCode == 32) { if (evt.preventDefault) { evt.preventDefault(); } else { evt.returnValue = false; } } });