11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai un petit soucis avec Firefox. Je veux capturer un événement dans un document qui est en designMode='on'.

addEventListener fonctionne très bien, seulement il ne fait qu'ajouter une action à l'événement, il ne désactive pas les actions par défaut.

Je veux donc faire un window.captureEvents(Event.KEYPRESS) suivi d'un window.onkeypress = maFonction;

Mais... Aucune réaction ! Ca vient visiblement d'une incompatibilité avec le designMode puisque cela fonctionne très bien si je ne l'active pas.

Si quelqu'un a réussi à régler le problème d'une façon ou d'une autre, je suis preneur !

Merci d'avance.
Modifié par JulienA (23 Aug 2006 - 23:15)
les evenements s'enchaine à la suite des autres. Pas besoin de supprimer l'action par défaut, car il suffit t'interrompre la propagation des evenements.
Quand tu rajoutes une evenement, il se mets dans une pile
par exemple, tu peux mettre X actions sur un evenement onclick
mafct3 --> mafct2 --> mafct1 --> defaut
si l'un d'eux renvoi false, la chaine s'arrete.
Il y a, si je ne me trompe pas de site, un cour très complet sur le site aidejavascript sur la propagation des evenements



Quand a la gestion des touches, tu devrais regarder la lib prototype.js qui fournit ce qu'il faut pour ca

function main(){
	document.designMode = "on";
	document.addEventListener('keypress',greffeEvenement,false);
}

	
function greffeEvenement(e){
	if(e.keyCode==9){
		if(e.shiftKey){
			document.execCommand("outdent",false,null);
		}
		else{
			document.execCommand("indent",false,null);
		}
	}
}


Quand vous faites une tabulation dans un RTE, le résultat se trouve être une suite d'espace. Je veux annuler cette action et faire une indentation à la place. Mon indentation se fait correctement, mais la suite d'espace également !

J'imagine que c'est un peu comme si j'avais deux addEventListener sur le même élément et utilisant le même événement. Donc je ne pense pas que ce soit une histoire de propagation. Impossible de faire en sorte que l'un empêche l'autre d'être activé ?


window.captureEvents(Event.KEYPRESS);
window.onkeypress = greffeEvenement;


Ce code là me simplifierait la vie mais il ne fonctionne malheureusement pas dans un document en designMode à on...
En fait, il suffisait d'utiliser la propriété eventDefault, pour Firefox, et de faire un return false pour IE, comme me l'avait conseillé nORKy.

Merci !