Changement de script dynamique de onclick sur html [Résolu]

Signaler
Messages postés
59
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
26 octobre 2015
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonsoir,

J'ai fait un script qui me permet sur un formulaire sur un clic d'effectuer une alternance d'image et de traitement déclenché par onclick :

[code]function changeImage(el_image, numero)
{
      var prefixe = document.getElementById('prefixe').value;
      var id_image = "image"+numero;
      var lien_avant = "new Effect.BlindDown('detail_histo"+numero+"', 1);changeImage(this, '"+numero+"');";
      var lien_apres = "new Effect.BlindUp('detail_histo"+numero+"', 1);changeImage(this, '"+numero+"');";
      var image_avant = 'images/Folder_Close.png';
    var image_avant = prefixe+image_avant;
    var image_apres = 'images/Folder_Open.png';
    var image_apres = prefixe+image_apres;

    if(el_image.src == image_avant)
        {
            el_image.src = image_apres;
            img_onclick = lien_apres;
        }
    else
          {
            el_image.src = image_avant;
            img_onclick = lien_avant;
        }
    document.getElementById(id_image).onclick=function(){img_onclick};
    getElementsByTagName("img").setAttribute("src", el_image.src);
   
}[code]

L'alternance de l'image se fait bien, mais pas celle du onclick

Mon formulaire html est :

[code][code]

Où se trouve mon erreur.

Merci d'avance

6 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
par goût ( est-ce mieux ? ) j'utiliserais une même fonction
testant "un état" de l'image et faisant soit BlindDown ou BlindUp
donc seul un onclick dans la balise, c'est tout.
<hr />


Cordialement            Bul    
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,

nous on ne dispose pas de :
        getElementById('prefixe')
       Effect.BlindDown
       Effect.BlindUp
       img_onclick               qui doit peut-être être = img_onclick() ?
                                           et pourquoi mettre ça en javascript si onclick déjà mis dans html ?
>>L'alternance de l'image se fait bien
    comment ? car là, on ne peut pas voir ça ? si ?




<hr />



Cordialement            Bul    
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
au fait... s'il faut changer l'image au click ( si j'ai bien compris ) :

<hr />


Cordialement            Bul    
Messages postés
59
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
26 octobre 2015

Bonjour et merci

"Prefixe" est le chemin d'accès pour les images

J'ai peut-être fait compliqué, mais "img_onclick" est égal soit à "lien_avant" soit à "lien_apres".
Eux-mêmes étant égal soit à
var lien_avant = "new Effect.BlindDown('detail_histo"+numero+"', 1);changeImage(this, '"+numero+"');";
var lien_apres = "new Effect.BlindUp('detail_histo"+numero+"', 1);changeImage(this, '"+numero+"');";

Je dois le mettre dans java script puisque lorsque je clique sur l'image la 1ère fois, la fonction "Effect.BlindDown" est activé et l'image change, le nom de la fonction disponible doit aussi changer. Si je clique à nouveau, la fonction "Effect.BlindUp" doit être activé et l'image revient à la 1ère ainsi que le nom de la fonction disponible.

Les fonctions Effect.BlindDown et Effect.BlindUp proviennent de "prototype.js" et "scriptaculous.js"
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
>>"img_onclick" est égal soit à "lien_avant" soit à "lien_apres"

oui, mais en string. ça ne va rien exécuter
(     pas même sûr que eval ça baignerait ,
      en plus le this... ce sera quoi ? la fonction probablement )

    document.getElementById(id_image).onclick=function(){ appel1(); appel2(); ... };

 >>Les fonctions Effect.BlindDown et Effect.BlindUp de prototype et scriptaculous
    je supputais bien un truc comme ça.




<hr />



Cordialement            Bul    
Messages postés
59
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
26 octobre 2015

Donc effectivement le string c'est pas bon,

J'ai comme cela et ça fonctionne

function changeImage(el_image, numero)
{
      var prefixe = document.getElementById('prefixe').value;
      var id_image = "image"+numero;
      var image_avant = 'images/Folder_Close.png';
    var image_avant = prefixe+image_avant;
    var image_apres = 'images/Folder_Open.png';
    var image_apres = prefixe+image_apres;

    if(el_image.src == image_avant)
        {
            el_image.src = image_apres;
            document.getElementById(id_image).onclick=function(){new Effect.BlindUp('detail_histo'+numero, 1); changeImage(this, numero);};
        }
    else
          {
            el_image.src = image_avant;
            document.getElementById(id_image).onclick=function(){new Effect.BlindDown('detail_histo'+numero, 1); changeImage(this, numero);};
        }
    getElementsByTagName("img").setAttribute("src", el_image.src);
}

Merci beaucoup

Vois-tu plus simple ?