11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je me permet de vous demander mon aide car je me heurte à un petit problème en JavaScript :

Je n'arrive pas à changer dynamiquement la fonction JavaScript appelée lors de l'évènement onKeyPress. Je m'explique :

J'ai dans la source de ma page html la ligne suivante :

<body onkeypress="javascript:key1(event);">


Le code Javascript appelé étant de ce type :


function key1(ev)
{
	var code;
	if(!ev) var ev = window.event;
	if(ev.keyCode) code = ev.keyCode;
	else if(ev.which) code = ev.which;

	alert('Fonction key1 : '+code);
}


Jusque là celà fonctionne parfaitement sous Firefox et Internet Explorer =)

Mais à un moment donné je veux modifier la première ligne, pour appeler lors de l'appui sur une touche la fonction key2 cette fois ci, qui se trouve être :


function key2(ev)
{
	var code;
	if(!ev) var ev = window.event;
	if(ev.keyCode) code = ev.keyCode;
	else if(ev.which) code = ev.which;

	alert('Fonction key2 : '+code);
}


Mais là je bloque Smiley ohwell

J'ai essayé plusieurs solutions, mais aucune ne marche à la fois sous Internet Explorer et sous Firefox...

Voilà ce que j'ai testé :


window.onkeypress = key2;

ou

window.onkeypress = function(ev) { code de la fonction key2 }; 

Ne marche pas sous IE.


document.body.onkeypress = 'javascript:key2(event);';

ou

document.getElementsByTagName('body')[0].onkeypress = 'javascript:key2(event);'

Ne marche pas du tout.

J'ai également entendu parler des fonctions setAttribut et attachEvent mais je n'arrive pas a les faire marcher correctement Smiley ohwell

Si quelqu'un serait en mesure de m'aider, je lui en serais très reconnaissant =)
merci d'avance.

++
neophell
Hello,

document.getElementsByTagName('body')[0].onkeypress = key2;


Le document.getElementsByTag est la solution la plus sure pour cibler ton body. Et l'attribution d'event se fait tout simplement en indiquant le nom de la fonction à utiliser.
Ah =)
merci beaucoup Tymlis !

Cela marche bien, je rage quand même de voir que je n'étais pas si loin que ça du but Smiley langue

Cependant une dernière petite chose m'embête (uniquement sous Firefox) :

Après le changement de fonction pour onkeypress, lors de l'appui sur une touche j'obtiens 2 fenêtres d'alerte : une provenant de la fonction key2 et une provenant de la fonction key1. Ce qui veut dire que les deux fonctions sont appelées, or je ne voudrais appeler que key2 Smiley ohwell

Saurais tu comment y remédier ?
Merci encore.

++
Neophell
Oh ? C'est étrange, l'ancien event devrait être remplacé par le nouveau normalement.

Tu aurais un tout petit bout de code ou une page en ligne qui montre ce problème en action ?
Oui, étrange.

J'obtiens bien le comportement voulu avec Internet Explorer (version 7.0.6*) mais avec Firefox les 2 fonctions sont appelées (version 3.0.5)
Modifié par neophell (29 Mar 2011 - 14:22)