Fehlermeldung beim Füllen eines Auswahlmenüs
André Laugks
- javascript
0 hein0 Antje Hofmann
Hallo!
Mit dem folgenden JavaScript soll über ein Auswahlmenü (rel) gefüllt werden und bestimmte Elemente per JS vorselektiert werden.
Problem, ich kann nur einmal in dem Auswahlmenü (mat_id) Material auswahlen. Bei zweiten mal bekomme ich eine Fehlermeldung. Die lautet im IE, daß liste[] kein Objekt ist und im NN bekomme ich gar keine Fehlermeldung aber das Auswahlmenü wird mit 3x "undefined" gefüllt.
Ich habe keine Ahnung woran es liegen kann. Ich finde der fehler nicht.
// Arrays werden am Server "gebaut"
// 5;Beta-SP;1 -> id;Bezeichnung;Auswahl(0/1)
var werte = new Array();
werte[1] = new Array("5;Beta-SP;1", "2;CD;1", "6;CD-Rom;0", "1;Cassette;0", "3;DAT;0", "8;DV;0", "9;DVC Pro;0", "10;DVD;0", "7;Digi-Beta;0", "12;Film 16mm;0", "13;Film 32mm;0", "11;Film 8mm;0", "14;HD;0", "15;High 8;0", "4;MP3;0", "17;Super 16;0", "16;Super 8;0", "18;VHS;0");
werte[2] = new Array("5;Beta-SP;0", "2;CD;1", "6;CD-Rom;0", "1;Cassette;0", "3;DAT;0", "8;DV;0", "9;DVC Pro;0", "10;DVD;0", "7;Digi-Beta;0", "12;Film 16mm;0", "13;Film 32mm;0", "11;Film 8mm;0", "14;HD;0", "15;High 8;0", "4;MP3;0", "17;Super 16;0", "16;Super 8;0", "18;VHS;1");
function fuellen()
{
// mat_id der Auswahl ermitteln
mat_id = document.formular.mat_id.options[document.formular.mat_id. options.selectedIndex].value;
if(mat_id != 'ka')
{
// Select-Feld leeren falls es gefüllt ist
ist_anzahl = document.formular.rel.length;
for(var i = 0; i < ist_anzahl; i++)
{
document.formular.rel.options[document.formular.rel.length-1] = null;
}
// Array mit dem Array passend zur mat_id füllen
liste = new Array();
liste = werte[mat_id];
// Auswahlmenü füllen
for(var i = 0; i < liste.length; i++)
{
//alert(liste[i]);
werte = liste[i].split(";"); // <<-- FEHLERMELDUNG
if(werte[2] == 1)
{
selecten = true;
}
else
{
selecten = false;
}
option_element = new Option(werte[1],werte[0],false,selecten);
document.formular.rel.options[document.formular.rel.length] = option_element;
}
}
}
<form name="formular">
<select name="mat_id" onchange="fuellen()">
<option value="1">1. Material</option>
<option value="2">2. Material</option>
</select>
<br><br>
<select multiple size="5" name="rel"></select>
</form>
MfG, André Laugks
verschiebe mal dein werte-array
var werte = new Array();
werte[1] = new Array("5;Beta-SP;1", "2;CD;1", "6;CD-Rom;0", "1;Cassette;0", "3;DAT;0", "8;DV;0", "9;DVC Pro;0", "10;DVD;0", "7;Digi-Beta;0", "12;Film 16mm;0", "13;Film 32mm;0", "11;Film 8mm;0", "14;HD;0", "15;High 8;0", "4;MP3;0", "17;Super 16;0", "16;Super 8;0", "18;VHS;0");
werte[2] = new Array("5;Beta-SP;0", "2;CD;1", "6;CD-Rom;0", "1;Cassette;0", "3;DAT;0", "8;DV;0", "9;DVC Pro;0", "10;DVD;0", "7;Digi-Beta;0", "12;Film 16mm;0", "13;Film 32mm;0", "11;Film 8mm;0", "14;HD;0", "15;High 8;0", "4;MP3;0", "17;Super 16;0", "16;Super 8;0", "18;VHS;1");
direkt in die funktion, also hinter function
"fuellen(){"
.. dann kommt bei mir keine fehlermeldung mehr, bin mir nur net sicher, ob es auch so funzt, wie du dir das dann vorstellst...
gruß hein
Hallo André,
Problem, ich kann nur einmal in dem Auswahlmenü (mat_id) Material auswahlen. Bei zweiten mal bekomme ich eine Fehlermeldung. Die lautet im IE, daß liste[] kein Objekt ist und im NN bekomme ich gar keine Fehlermeldung aber das Auswahlmenü wird mit 3x "undefined" gefüllt.
:-) du bist ganz böse über den Fehler lokale - globale Variable gestolpert
var werte = new Array();
das ist eine globale Variable
function fuellen()
liste = werte[mat_id];
hier füllst du deine Hilfsvariable mit Inhalten der globalen Variable
werte = liste[i].split(";"); // <<-- FEHLERMELDUNG
hier überschreibst du die globale Variable
Im ersten Durchlauf ist noch alles ok, im zweiten Durchlauf existiert aber dein Index nicht mehr und das verursacht die Fehlermeldung
Abhilfe: mache deine lokale Variable werte in deiner Funktion tatsächlich zu einer lokalen Variablen, also
var werte = liste[i].split(";");
oder nimm eine andere Bezeichnung. Deshalb hilft auch hein seine Lösung. Durch die Verschiebung der Definition des Arrays Werte in die Funktion wird dieses bei jedem Funktionaufruf neu initialisiert, da wirkt sich das Überschreiben nicht mehr aus.
Viele Grüße
Antje
Hallo!
:-) du bist ganz böse über den Fehler lokale - globale Variable gestolpert
Rrrrrrrrrrrrrr..., Vielen Dank!
MfG, André Laugks