Variable in Eventhandlerfunktion nicht mehr gültig?

shorty

Erfahrenes Mitglied
Guten Abend,

ich bin zurzeit dabei, ein Skript zu schreiben, welches ein Menühandling übernehmen soll. Es soll bei Klick auf einen Menübutton ausfahren, gleichzeitig gehighlightet werden, bei erneutem Klick wieder einfahren usw. usf.
Dabei verwende ich auch Prototype und Scriptaculous.

Nun stellt sich folgende Problematik dar:
Ich möchte gewisse Einstellungen beim Laden der Homepage setzen.
Dazu habe ich mir eine Funktion geschrieben, die beispielsweise onClick-Handler setzen soll.

Meine Frage: Warum ist "menuArr[i]" innerhalb des Funktionsaufrufes beim Setzen eines Eventhandlers nicht mehr gültig und wie kann ich sie auch innerhalb der Funktion gültig machen?

Code:
// Array mit Namen der Menüelemente.
var menuArr = new Array('home', 'uebermich', 'produkte', 'impressum');
	
function initMenu(id) {
	for(var i=0;i<menuArr.length;i++) {
		if(id!=menuArr[i]) {
			$('subnav_'+menuArr[i]).hide();
			$('navi_'+menuArr[i]).observe('click',
					function(event) {
						Effect.SlideDown('subnav_'+menuArr[i],
								{
									duration:0.5,
									queue:'end'
								}
						);
					}
			);
			$('navi_'+menuArr[i]).observe('mouseover',
					function(event) {
						alert('nav_'+menuArr[i]);
						HiLite('nav_'+menuArr[i],'Highlight',0);
					}
			);
		}
	}
		
}
	
// Funktion, die Bilder tauschen soll (Normal- und Highlightbilder).
// Diese Bilder werden vorher per "new Image()" vorgeladen und er halten
// als Variablennamen eben "Normal" und "Highlight" + eine fortlaufende Nummer,
// beginnend bei "0".
function HiLite(picID,objectID,i) {
	$(picID).src=eval(objectID+i+'.src');
}

Ich hoffe, ich konnte mich verständlich ausdrücken und es findet sich jemand, der darauf eine Lösung weiß.

Danke schon einmal im Voraus für jegliche Antwort.
 
Moin Kurzer :-)

Da schafft bind() Abhilfe ;)
Code:
Event.observe('nav_'+menuArr[i],'mouseover', HiLite.bind(this,'nav_'+menuArr[i],'Highlight',0));
 
Guten Morgen,

vorweg vielen Dank für die schnelle Antwort.
Ich werde es gleich mal testen ;).


//edit

Ich habe soeben einen Test durchgeführt. "menuArr[i]" ist nun nicht mehr "undefined", sondern enthält scheinbar immer den Index "0". Es wird nicht hochgezählt.
 
"i" in HiLite meinte ich hierbei nicht.
In der Funktion "initMenu" habe ich eine for-Schleife mit der Zählvariable "i" und diese Variable ist immer "0" , wenn ich sie an HiLite übergebe.. Ich selektiere mit dieser Zählvariable ein Element aus dem Array "menuArr".
 

Neue Beiträge

Zurück