11487 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
En utilisant les évènements clavier, je voudrais traiter différemment Shift-Enter et Enter.
Je ne comprends rien à la doc entre keypress qui est obsolète, keydown et keyup.
Existe-t-il quelque part une doc compréhensible ?
Modérateur
Bonjour,

PapyJP a écrit :
Bonjour à tous
En utilisant les évènements clavier, je voudrais traiter différemment Shift-Enter et Enter.
Je ne comprends rien à la doc entre keypress qui est obsolète, keydown et keyup.
Existe-t-il quelque part une doc compréhensible ?

1) Une doc informatique compréhensible, ça n'existe pas. Eventuellement, tu peux essayer de lire https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event et https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values

2) Je te conseille d'utiliser l'évènement keydown sauf si tu as une raison impérieuse d'utiliser autre chose.

3) Pour ce qui est du traitement lui-même, ça a pas mal changé au cours du temps. La tendance actuelle semble être d'utiliser la propriété booléenne shifKey pour savoir si la touche Shift a été pressée, et la propriété key pour savoir quelle touche a été appuyée. Et pour Enter, cette touche porte un nom qui est "Enter".

Exemple de code :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<label>Saisir un caractère <input></label>
<script>
function magic(ev)
{
	if(ev.key=="Enter")
	{
		if(ev.shiftKey) console.log(`"Enter" et "Shift"`);
		else console.log(`"Enter" sans "Shift"`);
	}
	else
	{
		if(ev.shiftKey) console.log(`Touche ${ev.key} et "Shift"`);
		else console.log(`Touche ${ev.key} sans "Shift"`);
	}
}
document.querySelector("input").addEventListener("keydown",function(ev){magic(ev);});
</script>
</body>
</html>
Note : au moment où on presse la touche Shift, un évènement est généré, ev.key vaut "Shift" et ev.shiftKey vaut true. En général, on ignore cet évènement.

Si on maintient la touche "Shift" appuyée et qu'on presse la touche "Enter", un autre évènement est généré, ev.key vaut alors "Enter", et ev.shiftKey vaut en principe encore true, ce qui permet de savoir si la touche "Shift" est toujours appuyée à ce moment-là.

Amicalement,