Javascript Switch in Internet Explorer und Firefox
abang_chris
- javascript
Sehr geehrtes Forum,
nach mehrtägiger Suche im englischen wie deutschen Internet habe ich nach wie vor keine Lösung für mein Problem gefunden und wende mich nun an dieses Forum.
Zur Grundidee: ein variabler Link in einem Formular-Button, dessen Inhalt über den User-Input (mehrere Drop-Down-Menüs im Formular) festegelegt wird um in einer komplexen Ordnerstruktur abgelegte Dokumente für den User zugänglich zu machen
function test(menu1,menu2){
switch(menu1.value)
{
case "A":
var folder = "X";
var year = "Y";
var start = "Z";
switch(menu2.value)
{
case "A":
var month = "111";
break;
case "B":
var month = "222";
break;
case "C":
var month = "333";
break;
default:
var month = "110";
}
break;
case "B":
var folder = "U";
var year = "V";
var start = "W";
switch(menu2.value)
{
case "A":
var month = "444";
break;
case "B":
var month = "555";
break;
case "C":
var month = "666";
break;
default:
var month = "440";
}
break;
default:
var folder = "X1";
var year = "Y1";
var start = "Z1";
}
location.href='directory/'+folder+'/'+year+'/'+month+'/'+start+'';
}
Und dies ist das dazugehörige Formular:
<form name="menufrm">
<select name="menu1">
<option>A</option>
<option>B</option>
</select>
<select name="menu2">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<input value="Browse" onclick="test(menu1,menu2)"
type="button">
Das Script funktioniert im Firefox wunderbar. Die Einzelfälle werden geparst und je nach Auswahl des Users wird der Pfad im Button zusammengesetzt. Der Internet Explorer im Gegensatz scheint über meine formulierten "cases" hinwegzugehen und substituiert lediglich die Variablen, die unter default: am Ende definiert sind. Alle anderen Variablen, auch wenn sie über die Auswahl des Users und den "case" definiert wurden, bleiben "undefined".
Ich bin im Bereich Javascript Anfänger. Muss ich für den IE noch etwas am Anfang definieren? Versteht der IE switches? Warum schaut sich der IE die "cases" nicht an? Ich bin mir sicher, dass der Fehler irgendwo in meinem Script liegt.
Any help would be appreciated.
Christian
Hallo,
zum besseren Verständnis erlaube ich mir, deine Blöcke in der Reihenfolgu umzustellen:
<form name="menufrm">
<select name="menu1">
<option>A</option>
<option>B</option>
</select>
<select name="menu2">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<input value="Browse" onclick="test(menu1,menu2)"
type="button">
> ~~~javascript
function test(menu1,menu2){
> switch(menu1.value)
> { ...
Das Script funktioniert im Firefox wunderbar. Die Einzelfälle werden geparst und je nach Auswahl des Users wird der Pfad im Button zusammengesetzt. Der Internet Explorer im Gegensatz scheint über meine formulierten "cases" hinwegzugehen und substituiert lediglich die Variablen, die unter default: am Ende definiert sind. Alle anderen Variablen, auch wenn sie über die Auswahl des Users und den "case" definiert wurden, bleiben "undefined".
Mit welchem IE testest du? Zumindest der 6er unterstützt für select-Elemente keine value-Eigenschaft; hier musst du über selectedIndex das momentan ausgewählte option-Element bestimmen und dessen value-Eigenschaft auslesen, also
select.options[select.selectedIndex].value
wenn select eine Referenz auf das entsprechende Elementobjekt ist.
Ich bin mir nicht sicher, ob das im IE7 und IE8 auch noch so ist, oder ob die inzwischen wie der FF direkt über das select-Objekt auf die value-Eigenschaft zugreifen können.
Versteht der IE switches?
Ja.
Warum schaut sich der IE die "cases" nicht an?
Weil er in deinem Fall ein switch (undefined)
bearbeiten muss.
Ich bin mir sicher, dass der Fehler irgendwo in meinem Script liegt.
Gewissermaßen, ja. ;-)
Ciao,
Martin
Hallo,
vielen Dank für die Antwort. Ich benutzte IE 8.0.6001. Anscheinend geht es da immernoch nicht. Ich werde das ganze über selectedIndex ausprobieren.
Danke vorerst,
Christian
Guten Abend,
vielen Dank für den Hinweis zu select-Element und value-Eigenschaft im IE. Ich habe die Sache jetzt über selectedIndex
gelöst. Ich frage den Index über einen cases ab und definiere dementsprechend meine Variablen für den Dateipfad.
Danke nochmals,
Christian
<input value="Browse" onclick="test(menu1,menu2)"
type="button">[/code]
Ich würde hier onChange benutzen!