Javascript - Manipulation des contrôles clavier

Dernière mise à jour le 20 novembre 2009 à 18:27 par Jeff
Publié par kij_82

Manipulation des contrôles clavier


Cette astuce a pour but de vous faire découvrir la (ou du moins une) manière de contrôler les évènements clavier en javascript.
Cela vous permettra de contrôler/attribuer les/des comportements particuliers à certaines touches du clavier.



Techniques pré-requises


Avant toute chose, les domaines suivants doivent vous être familiers:

Evènements du clavier


Voici la liste des évènements possible d'un clavier en javascript.
  • onkeypress : lorsqu'une touche est activée
  • onkeydown : lorsqu'une touche est enfoncée
  • onkeyup : lorsqu'une touche est 'relevée'


Pour de plus amples renseignements sur les évènements et leur gestion, vous pouvez consulter la rubrique javascript event

Il faut bien noter la différence entre, d'une part 'onkeypress', et d'autre part 'onkeydown' et 'onkeyup' ! 'onkeypress' sera appelée deux fois lorsque vous appuierez sur une touche : lorsque la touche est pressée, puis revelée. Donc si vous attribuez un comportement / traitement à cet évènement, prenez en compte qu'il sera effectué deux fois lorsque vous aurez appuyé sur votre touche. (A moins que vous contrôliez l'état de la touche (up ou down) directement dans le code javascript)

Attention cependant, tous les objets HTML ne comprennent pas ces fonctions de type écouteur, pour cela, renseignés vous sur le net avant de vous plonger dans votre code. (La liste est également fournie dans la rubrique javascript event

L'objet 'event' Javascript


Une fois un écouteur placé, il vous reste à définir le ou les traitements attribué(s) à l'évènement. La plupart du temps, vous souhaiterez pouvoir contrôler la source de l'évènement car, certes, avec l'évènement vous savez qu'il s'agit d'un évènement clavier, mais en aucun cas quelle touche exactement a été activée.

L'objet 'event' en Javascript est là pour ça. Il s'agit d'un objet qui regroupe les principales informations du clavier et de la souris. Vous pouvez facilement obtenir la description de cet objet sur internet, via google et les mots clés suivants : 'javascript objet event'.

Pour ce qui est des contrôles clavier, nous nous intéresserons plus particulièrement aux trois propriétés suivantes :
  • keyCode : code numérique de la touche clavier activée
  • altKey : booléen vrai si la touche ALT est activée
  • ctrlKey : booléen vrai si la touche CRTL est activée


En Javascript, l'objet 'event' n'est pas implémenté de la même manière d'un navigateur à un autre. Il est donc important de pouvoir distinguer les différents cas possibles, et récupérer de manière "universelle" cet objet.
  • Internet Explorer : window.event
  • Autre : par l'intermédiaire d'une variable 'event' passée automatiquement par le navigateur lorsqu'un évènement à lieu. Cette variable doit être incluse en tant que paramètre de vos fonctions de traitement. (voir exemple final)

Propriété keyCode et liste des valeurs


Cette propriété permet de récupérer la valeur entière de la touche activée. Il s'agit donc d'un chiffre.
Voici la liste des valeurs des touches les plus courantes :

KEY_DOWN	= 40;
KEY_UP		= 38;
KEY_LEFT	= 37;
KEY_RIGHT	= 39;

KEY_END		= 35;
KEY_BEGIN	= 36;

KEY_BACK_TAB 	= 8;
KEY_TAB				= 9;
KEY_SH_TAB  	= 16;
KEY_ENTER			= 13;
KEY_ESC				= 27;
KEY_SPACE			= 32;
KEY_DEL				= 46;

KEY_A		= 65;
KEY_B		= 66;
KEY_C		= 67;
KEY_D		= 68;
KEY_E		= 69;
KEY_F		= 70;
KEY_G		= 71;
KEY_H		= 72;
KEY_I		= 73;
KEY_J		= 74;
KEY_K		= 75;
KEY_L		= 76;
KEY_M		= 77;
KEY_N		= 78;
KEY_O		= 79;
KEY_P		= 80;
KEY_Q		= 81;
KEY_R		= 82;
KEY_S		= 83;
KEY_T		= 84;
KEY_U		= 85;
KEY_V		= 86;
KEY_W		= 87;
KEY_X		= 88;
KEY_Y		= 89;
KEY_Z		= 90;

KEY_PF1		= 112;
KEY_PF2		= 113;
KEY_PF3		= 114;
KEY_PF4		= 115;
KEY_PF5		= 116;
KEY_PF6		= 117;
KEY_PF7		= 118;
KEY_PF8		= 119;

Propriétés 'altKey' et 'ctrlKey'


Ces deux propriétés sont des booléens, qui signalerons si les touches 'ALT' ou 'CTRL' sont actives ou non.

Exemple : écouter les flèches directionnelles sur une page


Voici un exemple complet sur l'implémentation d'une écoute de clavier sur une page web.

Page web


Voici le code d'une page web volontairement simple.

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript" 	SRC="keyboard.js"></SCRIPT>
</HEAD>

<BODY>

<script language="javascript">
document.onkeydown = applyKey;
</script>

</BODY>
</HTML>


Le fichier de script 'keyboard.js' inclut dans la page sera détaillé au paragraphe suivant.
Ici nous nous intéresserons plus à la partie en gras. Elle permet d'appliquer la fonction javascript 'applyKey' (définie dans le fichier de script) à l'évènement 'onkeydown', lui même appliquer sur l'objet 'document', ce qui signifie la page courante entière.

Les fonctions Javascript


Voici, fonction par fonction, le code du fichier 'keyboard.js'. Le contenu intégral est donné plus bas dans la section Annexes.

Fonction applyKey


function applyKey (_event_){
	
	// --- Retrieve event object from current web explorer
	var winObj = checkEventObj(_event_);
	
	var intKeyCode = winObj.keyCode;
	var intAltKey = winObj.altKey;
	var intCtrlKey = winObj.ctrlKey;
		
	// 1° --- Access with [ALT/CTRL+Key]
	if (intAltKey || intCtrlKey) {
		
		if ( intKeyCode == KEY_RIGHT || intKeyCode == KEY_LEFT ){
			
			// --- Display Message
			alert("Hello with ALT/CTRL !");
			
			// 3° --- Map the keyCode in another keyCode not used
			winObj.keyCode = intKeyCode = REMAP_KEY_T;
			winObj.returnValue = false;
			return false;
		}
		
	}
	// 2 ° --- Access without [ALT/CTRL+Key]
	else {
		
		if ( intKeyCode == KEY_RIGHT || intKeyCode == KEY_LEFT ){
			
			// --- Display Message
			alert("Hello !");
			
			// 3° --- Map the keyCode in another keyCode not used
			winObj.keyCode = intKeyCode = REMAP_KEY_T;
			winObj.returnValue = false;
			return false;
		}
		
	}
	
}


Il s'agit de la fonction la plus complexe. Décortiquons la pas à pas.
  • Dans un premier temps, il s'agit de récupérer l'objet 'event' selon le type de navigateur.

Pour cela, nous invoquons la fonction 'checkEventObj' dont le code est donné plus bas.
  • Puis nous récupérons les valeurs des propriétés 'keyCode', 'altKey' et 'ctrlKey' de cet objet 'event' et les stockons dans des variables locales.
  • Ensuite nous distinguons les cas que nous souhaitons. Dans cet exemple, plusieurs contrôles sont effectués pour séparer les cas où :
    • La touche 'ALT' ou 'CTRL' est activée (CAS 1°)
    • La touche 'ALT' ou 'CTRL' n'est pas activée (Cas 2°)
  • Et enfin, nous appliquons un traitement dans le cas où seules les touches 'KEY_RIGHT' et 'KEY_LEFT' sont activée (respectivement flèche droite et flèche gauche du clavier). Ces deux valeurs correspondent à celles définies dans la liste des valeurs numériques des touches d'un clavier standard.
  • Pour finir (En 3°), vous pouvez voir qu'après le traitement spécifique de chaque touche (un message d'alerte), nous effectuons un mapping de ces touches.Cette partie est très importante. Lorsque vous interceptez de cette façon un évènement clavier, il faut ensuite l'inhiber pour la raison suivante : les navigateurs définissent des comportements par défaut sur certaines touches dans vos pages. Si vous ne faites pas de redirection, ces actions seront déclenchées à la suite des votre, ce qui peut avoir des effets indésirables selon les touches et les navigateurs.

Fonction checkEventObj


Cette fonction, selon le type de navigateur, retourne l'objet 'event' approprié.

function checkEventObj ( _event_ ){
	// --- IE explorer
	if ( window.event )
		return window.event;
	// --- Netscape and other explorers
	else
		return _event_;
}

Annexes


Code complet fichier 'keyboard.js' :

KEY_DOWN	= 40;
KEY_UP		= 38;
KEY_LEFT	= 37;
KEY_RIGHT	= 39;

KEY_END		= 35;
KEY_BEGIN	= 36;



KEY_BACK_TAB 	= 8;
KEY_TAB				= 9;
KEY_SH_TAB  	= 16;
KEY_ENTER			= 13;
KEY_ESC				= 27;
KEY_SPACE			= 32;
KEY_DEL				= 46;

KEY_A		= 65;
KEY_B		= 66;
KEY_C		= 67;
KEY_D		= 68;
KEY_E		= 69;
KEY_F		= 70;
KEY_G		= 71;
KEY_H		= 72;
KEY_I		= 73;
KEY_J		= 74;
KEY_K		= 75;
KEY_L		= 76;
KEY_M		= 77;
KEY_N		= 78;
KEY_O		= 79;
KEY_P		= 80;
KEY_Q		= 81;
KEY_R		= 82;
KEY_S		= 83;
KEY_T		= 84;
KEY_U		= 85;
KEY_V		= 86;
KEY_W		= 87;
KEY_X		= 88;
KEY_Y		= 89;
KEY_Z		= 90;

KEY_PF1		= 112;
KEY_PF2		= 113;
KEY_PF3		= 114;
KEY_PF4		= 115;
KEY_PF5		= 116;
KEY_PF6		= 117;
KEY_PF7		= 118;
KEY_PF8		= 119;

REMAP_KEY_T	= 5019;
	
function checkEventObj ( _event_ ){
	// --- IE explorer
	if ( window.event )
		return window.event;
	// --- Netscape and other explorers
	else
		return _event_;
}
	
function applyKey (_event_){
	
	// --- Retrieve event object from current web explorer
	var winObj = checkEventObj(_event_);
	
	var intKeyCode = winObj.keyCode;
	var intAltKey = winObj.altKey;
	var intCtrlKey = winObj.ctrlKey;
		
	// --- Access with [ALT/CTRL+Key]
	if (intAltKey || intCtrlKey) {
		
		if ( intKeyCode == KEY_RIGHT || intKeyCode == KEY_LEFT ){
			
			// --- Display Message
			alert("Hello with ALT/CTRL !");
			
			// --- Map the keyCode in another keyCode not used
			winObj.keyCode = intKeyCode = REMAP_KEY_T;
			winObj.returnValue = false;
			return false;
		}
		
	}
	// --- Access without [ALT/CTRL+Key]
	else {
		
		if ( intKeyCode == KEY_RIGHT || intKeyCode == KEY_LEFT ){
			
			// --- Display Message
			alert("Hello !");
			
			// --- Map the keyCode in another keyCode not used
			winObj.keyCode = intKeyCode = REMAP_KEY_T;
			winObj.returnValue = false;
			return false;
		}
		
	}
	
}
Meilleures réponses pour « Javascript Manipulation des contrôles clavier » dans :
Javascript - L'objet String Voir Les particularités de l'objet String string est un mot anglais qui signifie "chaîne", il s'agit en fait de chaîne de caractères. L'objet String est un objet qui contient un certain nombre de propriétés et de méthodes permettant la manipulation...
Rotation écran / Affichage inversé (90° ou 180°) VoirSi votre écran est inversé (rotation d'angle 90° voire 180°), ceci est dû : soit aux propriétés de votre carte graphique soit à une mauvaise manipulation sur le clavier Vérifier les propriétés de la carte graphique Cliquer avec le bouton...
Raccourcis clavier de Windows VoirRaccourcis clavier sous Windows ou comment éviter d'utiliser la souris ! Raccourcis spécifiques à Windows Pour la gestion de fichiers mais aussi pour tous les logiciels Pour les logiciels de traitement de texte Pour Word Pour Excel Pour...
Télécharger Clavier + VoirClavier+ est un outil qui vous permet d'associer toutes les touches du clavier à une action, y compris la touche Windows. Les raccourcis créés peuvent être associés à un programme ou à un texte particulier. Pour prendre un exemple concret, créez des...
Javascript - Les événements VoirQu'appelle-t-on un événement? Les événements sont des actions de l'utilisateur, qui vont pouvoir donner lieu à une interactivité. L'événement par excellence est le clic de souris, car c'est le seul que le HTML gère. Grâce au Javascript il est...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...