[JS] Pb onMouseOver / Out

Résolu/Fermé
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 3 sept. 2007 à 20:18
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 10 sept. 2007 à 13:25
Bonjour,

J'ai actuellement un script javascript sur l'un de mes sites qui me permet de modifier le status "visible" ou "hidden" de DIV sur la page.

En bref voici mes fonctions :

function onMouseOverOut ( elem, mode ){
	document.getElementById(elem).style.visibility = mode;
}

function updateStatus ( _div, _name, _value ){
	
	var oDiv = document.getElementById(_div);
	//alert("update status for : [div: "+_div+"] [name: "+_name+"] [value: "+_value+"]");
	if ( myTabSector[_name] == 0 ){
		// --- Change style
		changeFunctions(0, _div);

               alert("coucou");   // popup de test

		oDiv.style.visibility = "visible";

		// --- Update status in sectors array
		myTabSector[_name] = 1;
		// --- Update sectors session array
		opener.addSectorsInSession(_name, _value);
	}
	else if ( myTabSector[_name] == 1 ){
		// --- Change style
		changeFunctions(1, _div);
		oDiv.style.visibility = "hidden";

		// --- Update status in sectors array
		myTabSector[_name] = 0;
		// --- Update sectors session array
		opener.removeSectorsInSession(_name, _value);
	}
	
	
}

function changeFunctions ( status, divName ){
	
	var oDivs = null;
	var max = 0;

	if ( divName == "secteur7" )
		max = 8;
	else if ( divName == "secteur9" )
		max = 5;

	if ( max == 0 )
	{
		oDivs = document.getElementsByName(divName);
		upStat(oDivs[0],status,divName);
	}
	else {
		for ( var i = 1; i <= max; i++)
		{
			oDivs = document.getElementsByName(divName+i);
			upStat(oDivs[0],status,divName);
		}
	}

}

function upStat ( oDiv, status, divName ){

		if ( status == 0 )
		{
			oDiv.onmouseover = function(){};
			oDiv.onmouseout = function(){};
		}
		else if ( status == 1 )
		{
			oDiv.onmouseover = function(){
				onMouseOverOut(divName, "visible");
			}
			oDiv.onmouseout = function(){
				onMouseOverOut(divName, "hidden");
			}
		}
}

function selected ( value, libelle, div ){
	// --- Update status of current zone
	updateStatus(div, libelle, value);
}



Lorsqu'un utilisateur clique sur une "cellule" (DIV), une autre DIV invisible jusque là apparait (pour faire un effet grisé sur la cellule en question. J'ai donc mis la fonction "selected" (voir plus haut le script) sur l'évênement onClick de la cellule.

Mon probleme est le suivant : sous FF aucun soucis tout fonctionne. Sous IE tout semble fonctionner, seulement j'ai un "parasite" quelque part dans le sens ou des que j'ai cliqué la cellule se grise (la DIV invisible devient visible) et de suite redevient normale ( la DIV invisbile devenu visible redevient visible) sans aucune raison apparente.

Pour débugger j'ai mis une pop-up juste avant le changement de style (voir code). Si bien que lorsque je clique sur un cellule, la popup apparait juste avant de modifier l'état de la cellule. Je décale la popup ainsi apparut en dehors de la fenetre ou j'ai mes cellules, puis clique sur "ok" de la popup d'alert. Et là, miracle, la cellule reste grisée. Par contre lorsque je repasse ma souris sur la fenetre (n'importe ou) ou se trouvent les cellules, la cellule précédemment grisée redevient normal. :s

Quelqun saurait il d'ou cela peut venir ?

Merci beaucoup pour votre aide ^^


5 réponses

Gihef Messages postés 5150 Date d'inscription mercredi 20 juillet 2005 Statut Contributeur Dernière intervention 20 février 2023 2 778
3 sept. 2007 à 20:54
Bonjour,

Je ne suis pas assez calé pour décrypter ton script.
Cependant, il me semble que ça fonctionne logiquement.
Le onMouseOver sert au survol de l'élément par la souris. Le onMouseOut lorsque la souris le quitte.
Ils ne servent pas pour un clic (“Lorsqu'un utilisateur clique…”).

Pourquoi n'utilises-tu pas directement un événement onClick ?

--
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
3 sept. 2007 à 21:12
salut,

as-tu ajouté "return false;" au bout de la fonction dans le 'onclick' ?
onclick="mafonction(parametre); return false;"
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 sept. 2007 à 13:34
Non je n'ai pas mis de "return false", ca change quelque chose de spécial ?
En tout cas je ne pense pas que ca viennent de ca, mais je modifierai une fois rentré chez moi ce soir pour voir si c'est ca.
Merci de ton aide :)

0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
4 sept. 2007 à 13:40
salut,

je ne peux pas t'affirmer que c'est ça mais ça vaut le coup d'essayer.
cela indique au navigateur que l'évènement est traité et qu'il ne doit plus en tenir compte.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 sept. 2007 à 13:25
Hello all,

Le problème venait en fait de l'utilisation de 'getElementsByName()' qui ne s'utilise pas sur des éléments de type DIV. Ca passe sous FF (même si c'est pas recommandé), mais ce n'est pas le cas sous IE.
J'ai donc remplacé et modifier quelque peu l'organisation de mon code js et la disposition de mes balises (nommées via un id unique)

Pour plus de précision sur l'utilisation des méthodes 'getElementsByName()' et 'getElementById()', voici un lien sur un article :
http://www.developpez.net/forums/showthread.php?t=284119
0