L'ObiettivoCome passare una variabile in base al valore a una funzione javascript anonima?
voglio assegnare dinamicamente i gestori di eventi ad alcuni div alle pagine in tutto un sito.
mio Metodo
Im utilizzando jQuery per legare funzioni anonime come gestori per gli eventi selezionati div.
Il problema
Il codice itera un array di nomi div e URL associati. Il nome div viene utilizzato per impostare l'obiettivo di associazione, ad esempio, collegare questo gestore di eventi a questo evento div.
Mentre i gestori di eventi sono associati correttamente a ciascuno degli eventi div, le azioni attivate da tali gestori eventi hanno sempre come target solo l'ultimo elemento dell'array.
Quindi l'idea è che se l'utente esegue il mouse su un div specificato, dovrebbe eseguire un'animazione slide-out per quel div. Invece, mousing su div1 (rangeTabAll) attiva un'animazione slide-out per div4 (rangeTabThm). Lo stesso vale per i div 2, 3, ecc. L'ordine non è importante. Cambiare gli elementi dell'array attorno e gli eventi avranno sempre come target l'ultimo elemento dell'array, div4.
My Code - (usa jQuery)
var curTab, curDiv;
var inlineRangeNavUrls=[['rangeTabAll','range_all.html'],['rangeTabRem','range_remedial.html'],
['rangeTabGym','range_gym.html'],['rangeTabThm','range_thermal.html']];
for (var i=0;i<inlineRangeNavUrls.length;i++)
{
curTab=(inlineRangeNavUrls[i][0]).toString();
curDiv='#' + curTab;
if ($(curDiv).length)
{
$(curDiv).bind("mouseover", function(){showHideRangeSlidingTabs(curTab, true);});
$(curDiv).bind("mouseout", function(){showHideRangeSlidingTabs(curTab, false);});
}
}
mia teoria
sto o non vedendo un errore di sintassi assolutamente ovvio o la sua un passaggio dal problema di riferimento. Inizialmente ho avuto la seguente dichiarazione per impostare il valore di curTab:
curTab=inlineRangeNavUrls[i][0];
Così, quando il problema si è verificato Ho pensato che come ho cambiato (via per iterazione del ciclo) il riferimento alla curTab, ero infatti cambiare il riferimento per tutti i precedenti gestori di eventi di funzioni anonimi al nuovo valore di curTab .... ed è per questo che i gestori di eventi hanno sempre preso di mira l'ultimo div.
Così che cosa ho davvero bisogno di fare era passare il valore curTab ai gestori di eventi funzione anonima non il curTab oggetto di riferimento.
Così ho pensato:
curTab=(inlineRangeNavUrls[i][0]).toString();
sarebbe risolvere il problema, ma non è così. Stesso affare. Quindi chiaramente mi mancano alcune conoscenze chiave e probabilmente molto basilari riguardo al problema. Grazie.
JavaScript passa sempre e assegna per valore. La tua domanda non riguarda affatto il passaggio; ma piuttosto con la cattura di variabili da chiusure. – newacct