11499 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Alors voilà, je cherche à désactiver un event onclick pendant la transition du style que la fonction déclenchée modifie...
Je cherche à empêcher de potentiels clicks pendant la transition car cela fausse tout mes calculs...

Voici ma fonction test, je "null" le onclick jusqu'à ce que mon objet soit en position puis je le réactive en lui redonnant pour valeur la fonction d'origine... sauf que ben çà n'empêche pas de cliquer...


function pushRight()
{
	var commands = document.getElementsByClassName("commands");
	var listHolder = document.getElementById("listHolder");
	var left = document.getElementById("listHolder").offsetLeft;
	var test = left - (240 * 4);

	commands[1].onclick = null;

	listHolder.style.left = test + "px";

	if (left % 240 == 0) {
		commands[1].onclick = pushRight;
	}
}


Une idée ? Je cherche depuis un bon moment et mes alertes fonctionnent... je deviens fou Oo !!!
Modifié par LuCube (29 Oct 2013 - 22:30)
Bonjour,

il peut y avoir une autre explication aussi, ton code
commands[1].onclick = null;
rajoute un gestionnaire d’événement sur l'objet en question, tu conserves donc la gestion d’événement précédemment affectée en rajoutant un comportement supplémentaire qui est une fonction nulle

Mais ce que tu veux faire c'est supprimer toute capture d’événement précédemment affectée, je pense qu'il faut plutôt faire
commands[1].removeEventListener
, attention sous IE la commande est un peu différente, cherches dans la doc javascript, ou utilises une librairie comme JQUERY.
Tout d'abord merci pour avoir répondu aussi vite Smiley cligne

Alors j'ai testé vos deux propositions sans succès... toujours possible de cliquer...

Du coup j'ai changé de boucle :

function pushRight()
{
	var commands = document.getElementsByClassName("commands");
	var listHolder = document.getElementById("listHolder");
	var left = document.getElementById("listHolder").offsetLeft;
	var test = left - (240 * 4);

	if (left % 240 != 0) {
		commands[1].onclick = null;
	}
	else {
		listHolder.style.left = test + "px";
		commands[1].onclick = pushRight;
	}
}

Désormais je clique -> j'attends que la div défile -> je peux re-cliquer une fois le défilement terminé
Problème (nouveau bien sur mais mieux...) je clique -> je re-clique -> pas de sur défilement (problème 1 résolu donc) -> je ne peux plus cliquer (problème numéro 2)
Modifié par LuCube (30 Oct 2013 - 12:01)