Probleme beim Aendern der onclick-Actions

waxmax64

Grünschnabel
Hallo zusammen,

ich habe vor, abhaengig davon welches Element einer Auswahlliste angeklickt wird die onclick-Operationen mehrerer Buttons anzupassen.
Noch konkreter habe ich eine Auswahlliste mit zwei Optionen (Jalousie 1 und 2):

HTML:
<select id="multibutton0001" name="multibutton0001" class="schalter_00">
<option onclick="multibuttonHandler(12,02,0001,01,3)">Jalousie 1</option>
<option onclick="multibuttonHandler(12,02,0001,02,3)">Jalousie 2</option>
</select>

Die Buttons sehen beim Aufruf der Seite so aus:

HTML:
<img onclick="bedienung('12+01+01+02')" src="/mediaset02/02_1.png" name="button1" width="58" height="65" border="0" id="button1" >
<img onclick="bedienung('12+02+01+02')" src="/mediaset02/08_1.png" name="button2" width="58" height="65" border="0" id="button2" >
<img onclick="bedienung('12+03+01+02')" src="/mediaset02/03_1.png" name="button3" width="58" height="65" border="0" id="button3" >


Die entsprechende JS-Funktion sieht folgendermaßen aus:

Code:
function multibuttonHandler(index, page, multibutton, selectedElement, anzButtons)
{
	var numberOfSelectedMultibutton=Number(multibutton);
	
	for(i=1; i<=anzButtons; i+=1)
	{
		var numberOfElementToChange=Number(i);
		
		if(numberOfElementToChange<10)
		{
			var elToChange = document.getElementById("button"+numberOfElementToChange);	

			var bedienungsstring = index;
			bedienungsstring+="+";
			bedienungsstring+="0";
			bedienungsstring+=Number(i);
			bedienungsstring+="+";
			bedienungsstring+="0";
			bedienungsstring+=selectedElement;
			bedienungsstring+="+";
			bedienungsstring+="0";
			bedienungsstring+=page;

			alert(bedienungsstring);

			elToChange.onclick = function(){bedienung(bedienungsstring);};
		}
		else
		{
			// fuer die Loesung belanglos
		}
	}
}
Klicke ich nun eine Option an werden mir mittels der alert-Funktion auch die korrekten Strings angezeigt, sprich
12+01+01+02
12+02+01+02
12+03+01+02
fuer Jalousie 1

und
12+01+02+02
12+02+02+02
12+03+02+02
fuer Jalousie 2


Klicke ich dann aber einen der Buttons an schmeisst mir die alert-Funktion, die ich zu Debugzwecken in die Funktion bedienung(string){...} eingebaut habe um den uebergebenen String anzuzeigen:
12+03+01+02
12+03+01+02
12+03+01+02
fuer Jalousie 1

12+03+02+02
12+03+02+02
12+03+02+02
fuer Jalousie 2

sprich alle Buttons haben dann die Funktion des jeweils dritten (und letzten Buttons).

Kann mir jemand helfen und sagen wo mein (Denk-)Fehler liegt?

Danke schonmal!

Mfg Max



EDIT:
Die Zeile
Code:
elToChange.onclick = function(){bedienung(bedienungsstring);};
habe ich jetzt zum einfacheren Verständnis mal durch
Code:
elToChange.onclick = function(){alert(i);};
ersetzt.
Klicke ich nun (nachdem ich eine Auswahl getroffen habe) auf einen der Buttons (egal welchen und egal ob ich vorher Jalousie 1 oder 2 ausgewaehlt habe) gibt er mir "4" aus. Jetzt verstehe ich ueberhaupt nichts mehr, i wird doch maximal 3 (=anzButtons).



EDIT 2:
Also, dass 4 anstatt 3 ausgegeben wurde, lag an meiner for Schleife, das habe ich korrigiert.
Aber warum jeder Button die 3 ausgibt, verstehe ich immer noch nicht.
 
Zuletzt bearbeitet:
Sorry, habe ich uebersehen und jetzt eingefuehrt.

Habe ausserdem noch etwas hinzugefuegt, was vielleicht zum besseren Verstaendnis beitraegt.
 
Zuletzt bearbeitet:
Javascript:
for(i=1; i<=anzButtons; i+=1)
    {
        var numberOfElementToChange=Number(i);
Deine for Schleife läuft von 1 - 3, aber die array Indizes in javascript beginnen bei 0
Number(i) gibt dir deshalb bei i=1 den Wert für Button 2 zurück.
Was mich stutzig macht ist, das er bei beiden den gleichen Wert zurück gibt, da für i=3 Number(i) ja nicht mehr definiert ist.
 
Hallo ikosaeder,
danke fuer deine Antwort!
Vielleicht ist mir beim Zusammenkuerzen meiner Funktion fuer das Forum ein Fehler unterlaufen, der deine Verwirrung hervorruft - das "Herankommen" an die Elemente stellt jedenfalls kein Problem dar.
Das Problem ist offensichtlich, dass er allen Buttons die Funktion bedienung(bedienungsstring) zuordnet - und zwar allen den mit dem LETZTEN bedienungsstring.
Hab es jetzt "geloest", indem ich die Sache mit dem Zusammensetzen des "bedienstrings" weglasse und die onclick-Actions abhaengig von i einzeln aendere:
Code:
switch(i)
{		
		case 1:	elToChange.onclick = function(){bedienung(index+"+"+"01"+"+"+"0"+selectedElement+"+"+"0"+page);}; break;
		case 2:	elToChange.onclick = function(){bedienung(index+"+"+"02"+"+"+"0"+selectedElement+"+"+"0"+page);}; break;
		case 3:	elToChange.onclick = function(){bedienung(index+"+"+"03"+"+"+"0"+selectedElement+"+"+"0"+page);}; break;
		
}

Da das zwar funktioniert und jeder Button die Funktion hat, die er auch haben soll, die Loesung aber alles andere als schoen ist, lass ich das Topic mal noch ein paar Tage auf "ungeloest", vielleicht hat ja noch einer eine Idee. ;-)
 
Zuletzt bearbeitet:
Du solltest dir auf jeden Fall einmal anschauen, welche Werte Number(multibutton) und Number(i) jeweils haben, z.B.
mit console.log(Number(i),i)
Denn in der Zeile bedienungsstring+=Number(i); passiert ja ganz offensichtlich der Fehler. Oder wird bedienungsstring noch irgendwo sonst geändert?
Irre ich mich, oder brauchst du noch eine Abfrage if(i==multibutton) in deinem Code?
 
Number von multibutton gibt korrekt 1 und i im Laufe der Schleife auch korrekt 1, 2 und schließlich 3 aus.
alert(bedienungsstring) gibt ja auch wie schon im ersten Posting geschrieben korrekt im Laufe der Schleife korrekt
12+01+01+02
12+02+01+02
12+03+01+02
aus, nur wenn ich dann auf die Buttons klicke, haben sie alle den Wert 12+03+01+02 (im Falle von Jalousie 1).


Das Problem liegt meiner Meinung nach in der Zeile
elToChange.onclick = function(){bedienung(bedienungsstring);};

Er speichert mMn eben nicht bedienung mit dem jeweiligen String ab, sondern bedienung mit der Variable an sich, und da die Variable als letztes 12+03+01+02 ist, hat jeder Button diese Funktion.
 

Neue Beiträge

Zurück