Das ZielWie eine Variable nach Wert an eine anonyme Javascript-Funktion übergeben?
Ich möchte dynamisch an Event-Handler auf einige divs auf den Seiten während einer Website zugeordnet werden.
Meine Methode
Im jQuery mit anonymen Funktionen als Handler für ausgewählte div Ereignisse zu binden.
Das Problem
Der Code iteriert ein Array von div Namen und zugehörigen URLs. Der div-Name wird verwendet, um das Bindungsziel festzulegen, d. H. Diesen Ereignishandler an dieses div-Ereignis anzuhängen.
Während die Ereignishandler erfolgreich an jedes div-Ereignis gebunden sind, richten sich die von diesen Ereignishandlern ausgelösten Aktionen nur auf das letzte Element im Array.
Also die Idee ist, dass, wenn der Benutzer mouses über ein bestimmtes div, sollte es eine Slide-out-Animation für dieses div laufen. Stattdessen löst mousing over div1 (rangeTabAll) eine Slide-out-Animation für div4 (rangeTabThm) aus. Das gleiche gilt für divs 2, 3 usw. Die Reihenfolge ist unwichtig. Ändern Sie die Array-Elemente, und Ereignisse werden immer auf das letzte Element im Array, div4, ausgerichtet.
My-Code - (Verwendet 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);});
}
}
Meine Theorie
ich entweder keine blendend offensichtlich Syntaxfehler oder dessen einen Pass mit dem Bezugs Problem zu sehen. Anfangs hatte ich die folgende Anweisung den Wert von curTab einzustellen:
curTab=inlineRangeNavUrls[i][0];
Also, wenn das Problem aufgetreten ist ich dachte, dass, wie ich (über für Schleifeniterationslatenzzeit) geändert, um die Bezugnahme auf curTab, ich in der Tat Wechsel war die Referenz für alle früheren anonymen Funktionsereignishandler auch auf den neuen curTab-Wert ... weshalb Event-Handler immer das letzte div anvisierten.
Also, was ich wirklich brauchte, war zu tun, um den Wert auf das Ereignisse anonymen Funktion Handler curTab passiert nicht die curTab Objekt Referenz. So
ich dachte:
curTab=(inlineRangeNavUrls[i][0]).toString();
würde das Problem beheben, aber es funktioniert nicht. Gleicher Deal. Es fehlt also offensichtlich ein Schlüssel und wahrscheinlich sehr grundlegendes Wissen über das Problem. Vielen Dank.
JavaScript wird immer übergeben und nach Wert zugewiesen. Deine Frage betrifft nicht das Übergehen überhaupt; sondern eher mit der Erfassung von Variablen durch Schließungen. – newacct