takinelinfo
Messages postés13Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention 1 juillet 2008
-
1 juil. 2008 à 21:26
nicomilville
Messages postés3472Date d'inscriptionlundi 16 juillet 2007StatutMembreDernière intervention28 février 2014
-
2 juil. 2008 à 11:09
Bonsoir,
Je vais essayer de vous donner un autre exemple que le post précédent.
Voici une fonction toute bête:
<html>
<head>
<script type="text/javascript">
function init_lien()
{
var tab_lien = document.getElementsByTagName('a');
for(var i=0; i<tab_lien.length; i++)
tab_lien[i].onclick=function(){ alert(i); };
}
</script>
</head>
[# Lien 1]
[# Lien 2]
[# Lien 3]
</html>
Mon problème précédent se résume à celui ci. Comment passer un paramètre à une fonction que l'on veut associer à un onclick. Dans le cas ci dessus (pas besoin de serveur web pour le tester), comment faire pour que l'on ai:
clic lien 1 -> affiche "1"
clic lien 2 -> affiche "2"
clic lien 3 -> affiche "3"
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 2 juil. 2008 à 09:55
Bonjour,
le principe est de stocker la valeur sur le tag ( enfin, le principe que j'ai trouvé et que j'utilise bien souvent)
du coup pour l'exemple, on obtiendrait un truc :
<html>
<head>
<script type="text/javascript">
function init_lien()
{
var tab_lien = document.getElementsByTagName('a');
for(var i=0; i<tab_lien.length; i++){
// stockage de la valeur sur le lien
// ajoute 1 à i car, le i commençant à 0 l'affichage comme demandé dans l'exemple commencerait par 0.
tab_lien[i].storeValue = i + 1 ;
tab_lien[i].onclick=function(){ alert(this.storeValue); };
}
}
</script>
</head>
ralecul
Messages postés111Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 1 août 2008 2 juil. 2008 à 10:19
Salut,
La solution n'est pas si facile que ça à comprendre...
function init_lien()
{
var tab_lien = document.getElementsByTagName('a');
for(var i=0; i<tab_lien.length; i++)
tab_lien[i].onclick=function(index){ return function() { alert(index+1);}; }(i);
}
Si tu veut comprendre comment ça marche il faut que tu te documentes sur les closures.
La solution proposé par Zobilol est fonctionnelle mais elle n'est pas satisfaisante car elle ajoute un attribut à l'élément sur lequel tu ajoutes un event listener.
Il serait également plus "conforme" d'utiliser la méthode DOM-2 d'ajout d'event plutôt que la méthode DOM-0.