Hallo Leute,
ich stehe hier vor einem kleinem JavaScript Problem, ich hoffe jemand hat eine Idee.
Ich habe ein recht komplexes JS geschrieben für die dynamische Füllung von Dropdowns. Beispiel: Der User wählt im ersten Dropdown die Option "Länder" aus, daraufhin wird der zweite Dropdown mit Ländern gefüllt. Hätte er die Option "Städte" ausgewählt, wäre der zweite Dropdown mit Städten gefüllt worden. Es gibt aber nicht nur 2, sondern eine recht große Baumstruktur von Dropdowns.
Ich habe eine Funktion fillCombos(), die onChange ausgeführt wird, sobald sich bei einem Dropdown etwas tut. Diese fillCombos() Funktion muss wissen welches Dropdown genau angefasst wurde, damit die Funktion die dazu passenden Dropdowns neu füllen kann. Und genau darin liegt mein Problem. Wie weiss meine fillCombos() Methode von welchem Dropdown aus er onChange aufgerufen wurde.
Ich hätte natürlich die Möglichkeit in jedem Dropdown im HTML Code den onChange zu deklarieren und eine Referenz auf den aufrufenden Dropdown zu übergeben:
<select name="Hase" onChange="fillCombos(this)">
Das würde allerdings die Usability von meinem JS einschränken. Ich möchte einem HTML Programmierer, der mein JS einbindet dies abnehmen, damit er nicht überall den onChange deklarieren muss.
Das ist im Grunde auch kein Problem, ich habe es folgendermaßen in JS realisiert:
form.elements[comboName].onchange = fillCombos;
Dies wird an einer passenden Stelle in meinem JS eingebunden und damit deklariere ich den onChange="fillCombos()" für den HTML Programmierer. Wie man sieht belege ich das onchange Attribut mit einer Referenz zur fillCombos() Funktion. Was jetzt fehlt ist die Übergabe einer Referenz zur aufrufenden Dropdown.
Im Firefox ist das kein Problem. Ich deklariere die fillCombos() Funktion so:
function fillCombos(event)
{
...
}
und dann stehen im event Parameter Informationen über das aufrufende Form Element und darüber finde ich den Dropdown. Im IE passiert aber nichtsdergleichen und da muss es leider auch funktionieren.
Ich würde ja gerne soetwas machen:
form.elements[comboName].onchange = fillCombos(comboName);
Also eine Referenz zu einem Funktionsaufruf, der auch gleich einen festgelegten Parameter mit übergibt. Aber so funktioniert es leider nicht, denn das wird keine Referenz zur Funktion, sondern der Rückgabewert der Funktion die in diesem Augenblick auch ausgeführt wird.
Also wie kann ich denn soetwas machen? Eine Referenz zu einer Funktion mit festgelegtem Parameter.
Oder hat jemand noch eine andere Idee, wie ich den aufrufenden Dropdown herausfinden kann,ohne dass ich manuell im HTML jedes onChange deklarieren muss?
Es ist dafür gesorgt, dass jedes Dropdown einen eindeutigen Namen hat, also brauche ich nicht unbedingt gleich eine Refernz zum Form Element. Der Name als String würde völlig aussreichen.
Viele Grüße,
Cruz