Hallo,
gerade bin ich dabei, ein vorhandenes Javascript umzuprogrammieren
und bin dabei auf ein Problem gestoßen. Vielleicht weiß ja einer von
Ihnen, wie man es schnell lösen kann.
Mit dem vorhandenen Script (JavaScript Toolbox - Dynamic Option List)
sollen sechs Dropdown-Felder dynamisch mit Inhalt gefüllt werden sowie - je
nach Auswahl in einem der Felder - die nicht damit verknüpften Inhalte aus den
anderen Dropdown-Feldern verschwinden.
Dafür werden zuerst die Verknüpfungen in Arrays geschrieben und für jeden Eintrag
temporär gespeichert. Allerdings werden diese Verknüpfungen falsch gespeichert.
Hier ein Auszug aus dem Script & als anhang der ganze HTML Quelltext:
Code:
function DynamicOptionList_addOptions(dependentValue) {
/* programmierter Einschub - übergebene Werte werden 'auseinander genommen' */
var test = dependentValue;
var arg1,arg2,arg3,arg4,arg5,arg6,argA,argB,argC,argD,argE,argF;
var alle = 0;
var zaehlen = 0;
// Anzahl der übergebenen Werte zählen
for (var f=1; test.indexOf('|') != -1; f++) {
var laenge = test.length;
var pos = test.indexOf('|');
zaehlen++;
var nummer = zaehlen+'';
// die IDs einzeln extrahieren
switch (nummer) {
case '1': arg1 = test.substring(0,pos);
break;
case '2': arg2 = test.substring(0,pos);
break;
case '3': arg3 = test.substring(0,pos);
break;
case '4': arg4 = test.substring(0,pos);
break;
case '5': arg5 = test.substring(0,pos);
break;
case '6': arg6 = test.substring(0,pos);
break;
default: break;
}
test = test.substring(pos+1,laenge);
}
// Anzahl der Möglichkeiten ermitteln (2 hoch f)
var anzahl = Math.pow(2,f);
var zaehlen2 = 0;
// und für diese Möglichkeiten alle Einträge vornehmen
for (var g=1; g<=anzahl; g++) {
zaehlen2++;
nummer2 = zaehlen2+'';
if (arg1 != 0) {
if (nummer2 % 2 == 1) {argA=arg1;} else {argA=alle;}
dependentValue = argA
// alert(argA);
}
if (arg2 != 0) {
if (nummer2 % 4 <= 2) {argB=arg2;} else {argB=alle;}
dependentValue = argA + this.delimiter + argB
}
if (arg3 != 0) {
if (nummer2 % 8 <= 1) {argC=arg3;} else {argC=alle;}
dependentValue = argA + this.delimiter + argB + this.delimiter + argC
}
if (arg4 != 0) {
if (nummer2 % 16 <= 1) {argD=arg4;} else {argD=alle;}
dependentValue = argA + this.delimiter + argB + this.delimiter + argC + this.delimiter + argD
}
if (arg5 != 0) {
if (nummer2 % 32 <= 1) {argE=arg5;} else {argE=alle;}
dependentValue = argA + this.delimiter + argB + this.delimiter + argC + this.delimiter + argD + this.delimiter + argE
}
if (arg6 != 0) {
if (nummer2 % 64 <= 1) {argF=arg6;} else {argF=alle;}
dependentValue = argA + this.delimiter + argB + this.delimiter + argC + this.delimiter + argD + this.delimiter + argE + this.delimiter + argF
}
if (typeof this.options[dependentValue] != "object") { this.options[dependentValue] = new Array(); }
for (var i=1; i<arguments.length; i+=2) {
alert(arguments[i+1]); // -> durchläuft diese Schleife 2 hoch f mal. -> richtige Werte sollten geladen werden.
// Keep track of the longest potential string, to draw the option list
if (arguments[i].length > this.longestString.length) {
this.longestString = arguments[i];
}
this.numberOfOptions++;
this.options[dependentValue][this.options[dependentValue].length] = arguments[i]; // lade den Wert (z.B. Auto)
this.options[dependentValue][this.options[dependentValue].length] = arguments[i+1]; // lade die ID zum Wert (z.B. 1234)
}
}
}
Hat jemand eine Idee, wo der Denkfehler liegen kann?
Mit Ajax wäre dies sicherlich einfacher zu lösen, allerdings kann ich dies aus
mehreren Gründen nicht nutzen und muss daraufhin auf Javacsript zurückgreifen.
Viele Grüße,