Hallo Insomnia,
ich hätte angenommen, Kai kümmert sich auch weiter zu Problemen mit seinem Lösungsvorschlag.
<a href="#" onclick="blocks_an_aus ('an','box1','box2','box3','box4') ;return false">Test</a>
Hiermit willst du einblenden. Du übergibst 5 Parameter, dabei setzt aber du „myIds” auf 'an' und „aktion” auf 'box1'!
function blocks_an_aus (myIds, aktion) {
if (document.getElementById) {
for (var i = 1, l = arguments.length - 1; i < l ; i++) {
i ist jetzt 1, l ist jetzt arguments.length - 1, also 4.
zur Information:
arguments[0] enthält 'an',
arguments[1] enthält 'box1',
arguments[2] enthält 'box2',
arguments[3] enthält 'box3',
arguments[4] enthält 'box4'
Die Schleife läuft so lange, wie i < l, also wie i < 4, i kann also niemals 4 werden.
> `var el = document.getElementById (arguments[i]);`{:.language-javascript}
Damit wird arguments[4] ('box4') nie verwendet.
> ~~~javascript
if (el && el.style) {
> if (aktion != 'aus') {
aktion enthält 'box1', das ist <> 'aus', also wird die folgende Zeile ausgeführt, also ausgeblendet, egal, wie der erste Parameter lautet.
~~~javascript
el.style.display = 'block';
} else {
el.style.display = 'none';
}
}
}
}
}
>
> Ach so… ich hab mal box3 und box4 den platz tauschen lassen.
>
> `<a href="#" onclick="blocks_an_aus ('an','box1','box2','box4','box3') ;return false">Test</a>`{:.language-javascript}
>
> dann erschien box3 nicht.
Genau, damit wird ja auch 'box4' zu arguments[3], und wird verwendet und 'box3'zu arguments[4], was nie verwendet wird.
Wenn der Aufruf der Funktion so erfolgt: `blocks_an_aus ('an','box1','box2','box3','box4') ;`{:.language-javascript}, dann muss in der Funktionsdefinition auch „aktion” der erste Parameter sein. Dann sollte die Funktionsdefinition vielleicht so aussehen: `function blocks_an_aus (aktion)`{:.language-javascript}. Mich stört daran allerdings, dass es nicht ersichtlich ist, dass noch mehr Parameter benötigt werden. Bei `function blocks_an_aus (aktion, MyId)`{:.language-javascript}, was auch möglich wäre, ist immer noch nicht ersichtlich, dass es auch noch mehr Parameter mit Ids sein dürfen.
Die Schleife könnte ganz einfach so aussehen: `for (var i = 1; i < blocks_an_aus.arguments.length; i++)`{:.language-javascript}.
>
> Grüsse
> Insomnia
>
Auf Wiederlesen
Detlef
--
- Wissen ist gut
- Können ist besser
- aber das Beste und Interessanteste ist der Weg dahin!