Pb avec event Handler

Résolu
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 24 févr. 2005 à 01:31
chimelpremier Messages postés 544 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 20 mai 2005 - 24 févr. 2005 à 16:08
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

cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
24 févr. 2005 à 12:14
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
3
chimelpremier Messages postés 544 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 20 mai 2005
24 févr. 2005 à 14:10
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>
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 févr. 2005 à 02:19
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 févr. 2005 à 10:17
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
0

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

Posez votre question
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
24 févr. 2005 à 10:59
Bonjour

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

Cordialement
Roro webDev
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 févr. 2005 à 11:26
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
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 févr. 2005 à 12:42
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 févr. 2005 à 13:57
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 févr. 2005 à 14:04
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 févr. 2005 à 14:35
@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
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
24 févr. 2005 à 14:37
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
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
24 févr. 2005 à 14:39
Bonjour

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

Cordialement
Roro webDev
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 févr. 2005 à 14:52
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
0
cs_roro06 Messages postés 732 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 29 octobre 2007
24 févr. 2005 à 15:08
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
0
chimelpremier Messages postés 544 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 20 mai 2005
24 févr. 2005 à 16:08
onload="javascript:window_onload()" est un pléonasme
en HTML4 onload ne peut être mis que dans les balises body ou frameset
0
Rejoignez-nous