Pb avec event Handler [Résolu]

Signaler
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
-
Bonjour, j'ai un problème avec la declaration d'un de mes events. Plutot qu'un long discours, voici le code qui pose problème.



function window_onload()

{

for (var i=0; i < 11; i++ )



document.getElementById("Note").getElementsByTagName("img")[i].onmouseover
= function(){Note(i);};

}



Ensuite lorque je fais passe sur une image, ca me met sur n'importe
laquelle de celle ci, la valeur 11, je change la valeur de {Note(i);}
par {Note(2);} et ca m'assigne logiquement 2



Cela se produit aussi bien sous IE que sous Firefox, j'ai donc
l'impression, que seul la derniere valeur est pris en compte dans mon
code pour toutes les images :(



Auriez vous une idée quand à la résolution du problème ?



Merci

<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr

15 réponses

Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

Explication du probleme : ta fonction Note reçoit la valeur de i au moment ou l'évènement se produit. Pour t'en convaincre, après ta boucle for, rajoutes i=555 et testes : ta fonction affichera à chaque fois 555
J'ai déjà m***é sur un problème similaire y'a pas longtemps, voici une solution de remplacement :

function Nn(evt)


{
var obj=null;
obj=(document.all)?window.event.srcElement:evt.target;


alert(obj.alt);
}



function window_onload()
{
//Nn();


for(var i=0; i < 11; i++)
{
document.getElementById("Note").getElementsByTagName("img")[i].onmouseover = Nn ;
}
}


//-->
</SCRIPT>
Pour ce qui est du HTML :





Notes




</HTML>

( J'ai renommé la fonction Note car il y à déjà un div appelé ainsi, question de "convenance personnelle")

Cordialement
Roro webDev
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

essaie ça :

<html>
<head>
<script type="text/javascript">
function window_onload()
{
for(var i=0; i < 11; i++)
{
document.getElementById("Note").innerHTML+=''
}
}


window.onload=window_onload
</script>
</head>

</html>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
document.getElementById("Note").onmouseover
= function(){Note(i);};


mets des id diférents...

ou alors trouves une identification plus pratique...

pe celle là :

document.getElementById("Note").images.onmouseover
= function(){Note(i);};



In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
mes elements sont differents.



document.getElementById("Note").getElementsByTagName("img")[i]



mes elements n'ont pas d'ID, et je prefere ne pas en mettre cette
méthode marche, car je modifie d'autres propriété comme ca. mais je ne
comprend pas pourquoi il me change pas ma variable i




<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

J'aimerais bien voir le contexte, car je ne comprend pas ce qu'est "Note"

Cordialement
Roro webDev
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Note, on peut dire que c'est

function Note(n)

{

alert(n);

}



Mais voici tout de meme les lignes de code



function window_onload()

{

Note();



for(var i=0; i < 11; i++)

{




document.getElementById("Note").getElementsByTagName("img")[i].onmouseover
= function(){Note(i);};

// Ne fonctionne pas non plus


//
with(document.getElementById("Note").getElementsByTagName("img")[i])

// {


//
if(document.attachEvent)// IE 5+

// {


//
attachEvent("onmouseover",function(){Note(i);});


//
attachEvent("onmouseout",function(){Note();});

// }


// else if
(document.addEventListener)// DOM 2, NS6+

// {


//

addEventListener("mouseover",function(){Note(i);},true);


//

addEventListener("mouseout",function(){Note();},true);

// }

// }

}

}



Pour ce qui est du HTML :








Notes











Si je met un onmouseover et onmouseout sur chaque img ca fonctionne,
mais je veux quelque chose d'optimisé, il en va pour le bien de tous



Si je fais un onmouseover sur une image, ca m'affiche 11, si je fais un onmouseout, ca m'affiche bien null



mon problème se situe au niveau du 11, j'aurais preferé le bon numéro

<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
déja name n'existe pas en théorie...



ensuite, le name n'est pas un element de l'id...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Pour répondre à coucou747



Je sais que la propriété name n'existe pas, je pense que tu me parles
de ca, car j'utilise la fonction getelementbytagname cette fonction
retourne un tableau qui contient toutes mes images de la div Note



Et la fonction est une fonction du DOM : http://fr.selfhtml.org/javascript/objets/document.htm#get_elements_by_tag_name



Pour roro06, j'avais pas vu ca comme ca
je comprend la solution de remplacement, mais j'aurais preferé trouver
mieux :-/ car pour la description c'est pas ce qu'il y a de
mieux, j'aurais preferé être un peu plus "libre"



mais je vais me contenter de cette solution, ou sinon je vais peut etre essayé en faisant un





En tout cas merci à toi, de m'avoir expliqué d'ou venait le problème


<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Finalement il veut pas avec un star.gif#9 mais accepte un star.gif?9



Je suis pas tres tres doué en JS, tu peux m'expliquer ca ?



var obj=null;
obj=(document.all)?window.event.srcElement:evt.target;



je sais qu'il y a un if, mais je comprend pas le pourqoi de la chose



c'est bien ca ?

var s = condition?restultrue:resultfalse;



En relisant, ca voudrais dire qeu si document.all est true alors obj window.event.srcElement sinon obj evt.target ?



ca sert pour la compatibilité ? Il me faut que ce que je fasse soit compatible pour tout les navigateurs comme ca c'est bon ?




<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
@chimelpremier



Ce que tu proposes resoud mon problème
et je pense que c'est surement plus compatible que de mettre un
event à la volée, et puis je prefere que ce soit fait un javascript,
car comme ca, j'ai plus de controle sur ma fonction Note, qui est loin
d'etre une simple alert



En tout cas merci à vous tous !



Il me reste une derniere question :









Notes




















Notes












Pourquoi le premier marche, et pas le deuxieme ? l'evenenement load
n'existe pas sur un div, j'ai mis oninit et ca change rien :(





merci


http://hoshimi.codes-sources.fr/


<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

jesusonline : oui, tout à fait, c'est un test javascript

a=(b)?c:d; est équivalent de :
if (b)
a=c
else
a=d

Dans le cas présent, c'est bien pour la compatibilité IE (seul à connaître l'objet all) ne connaît pas la propriété target, et mozilla (et consort) ne connaît pas srcElement.
Développer javascript pour tous navigateurs : du pur bonheur !!!

Cordialement
Roro webDev
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

Ah ! on s'est croisé !
Deuxième question : parceque la balise div ne connaît pas l'évènement onload

Cordialement
Roro webDev
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Si div ne connait pas onLoad, ca veut dire que Whidbey me dit n'importe quoi ??? :'(



Dommage car pour l'instant, je le trouvais tres tres bien !



A la place d'un div, je peux mettre quoi ? j'ai regardé parmis les choses courante, mais je trouve rien avec le onload :(



Sinon tant pis, je mettrais l'appel a ma fonction aprés le code html, avec les balises <script


<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

Désolé, je ne connais pas Whidbey..
Je te confirme que le div ne connait pas le onload (à ma connaissance !)
Mais ta première solution était meilleure, et même celle proposée par chimelpremier
(window.onload=window_onload) encore meilleure.

Cordialement
Roro webDev
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

onload="javascript:window_onload()" est un pléonasme
en HTML4 onload ne peut être mis que dans les balises body ou frameset