problema parametro funzione addEventListener

  • Creatore Discussione Creatore Discussione ntoflip
  • Data di inizio Data di inizio

ntoflip

Utente Attivo
26 Ago 2008
50
0
0
Ciao a tutti, è tutta la mattinata che non riesco a venire a capo di un problema che probabilmente ha una semplice soluzione..

Ho elaborato una galleria in cui al click di una freccia di scorrimento crea e aggiunge un div che contiene l'immagine successiva con createElement e appendChild, al div viene associata una funzione per l'ingrandimento visualizzaFoto(n), dove n è il numero dell'immagine, con addEventListener o semplicemente con
Codice:
div.onclick = function() {
			visualizzaFoto(n);
		}
Il mio problema è che nel momento in cui viene associata la funzione il parametro n non viene trasformato nel numero della foto ma rimane "n", per cui, dopo aver scrollato due o più immagini, su qualsiasi foto di quelle aggiunte io clicchi, n assume sempre l'ultimo valore assegnato visualizzandomi sempre l'ultima foto.:incazz2::incazz2:

Spero di essermi spiegato bene, confido nel vostro aiuto prima di impazzire
 
Ultima modifica:
guarda il codice è abbastanza spezzettato ed è un po' complicato riprodurlo in sintesi..

cmq c'è il codice html con
Codice:
<div id="frecciasx" onclick="indietro()"></div>
<div id="galleria">
    // al caricamento della pagina vengono inseriti qui 6 div contenenti ciascuno un'immagine
</div>
<div id="frecciadx" onclick="avanti()"></div>

poi c'è il codice js
Codice:
var n = 0;

function avanti() {
    // qui c'è una chiamata ajax al db per ottenere l'immagine successiva
    // viene usata la variabile n come puntatore che viene aumentato lato php e restituito
}

function scorrimentoAvanti() {
    // la risposta Ajax viene processata qui:
    // ottengo il puntatore aggiornato
    n = n_risposta;                    // adesso n = 1
    // ottengo il percorso dell'immagine
    path = p_risposta;

    // viene creato un nuovo div
    div = document.createElement('DIV');
    div.onclick = function() {
        visualizzaFoto(n);         // questo è il punto cruciale!!!!
    }
    // creo un elemento immagine e lo inserisco nel div appena creato
    immagine = document.createElement('IMG');
    immagine.setAttribute('src', path);
    div.appendChild(immagine);
    document.getElementById('galleria').appendChild(div);
}

appena clicco sulla freccia dx per andare avanti il codice html si trasforma in

Codice:
<div id="frecciasx" onclick="indietro()"></div>
<div id="galleria">
    // qui ci sono le immagini caricate all'onload della pagina più la nuova immagine appena aggiunta:
    <div onclick="visualizzaFoto(n)"><img src="" /></div>
</div>
<div id="frecciadx" onclick="avanti()"></div>

dopo un ulteriore click sulla freccia dx (n = 2) avrò:

Codice:
<div id="frecciasx" onclick="indietro()"></div>
<div id="galleria">
    <div onclick="visualizzaFoto(n)"><img src="" /></div>
    <div onclick="visualizzaFoto(n)"><img src="" /></div>
</div>
<div id="frecciadx" onclick="avanti()"></div>

che equivale a

Codice:
<div id="frecciasx" onclick="indietro()"></div>
<div id="galleria">
    <div onclick="visualizzaFoto(2)"><img src="" /></div>
    <div onclick="visualizzaFoto(2)"><img src="" /></div>
</div>
<div id="frecciadx" onclick="avanti()"></div>

invece quello che desidero è che venga fuori:

Codice:
<div id="frecciasx" onclick="indietro()"></div>
<div id="galleria">
    <div onclick="visualizzaFoto(1)"><img src="" /></div>
    <div onclick="visualizzaFoto(2)"><img src="" /></div>
</div>
<div id="frecciadx" onclick="avanti()"></div>

il problema è che n, quando viene associata la funzione visualizzaFoto(n) rimane un parametro e non viene passato come il valore che ha n in quel momento.. le ho provate tutte tipo:
parseInt(n);
eval(n);
ma niente da fare.
 

Discussioni simili