Hallo,
lange Rede kurzer Sinn, habe eben in einen anderen Forum diesen Code-Schnipsel gepostet, der kann eigentlich auch gleich hier ins Tutorial, weil die Frage so oft vorkommt.
Und zwar:
Wie mache ich das, dass eine <select> Auswahl eine weitere <select> Auswahl anzeigt, deren Daten direkt von der Auswahl abhängen.
Ich behaupte einfach mal, der Code ist größtenteils selbsterklärend, zumindest ist er auch für den Laien erweiterbar.
Einfach den JavaScript-Array mygroup mit einer PHP-Schleife generieren.
Die 1. Dimension von mygroup steht für den Primärschlüssel der 1. Auswahl. Er muss nicht fortlaufend sein.
Die 2. Dimension von mygroup ist eine fortlaufenden Zahl, beginnend mit 0 (also einfach den PHP-Schleifen-Zähler reinbraten).
new Option(text, value)
text steht hierbei für den sichtbaren Text im sub-<select>, value könnte der Primärschlüssel einer verlinkten Tabelle des Haupt-<select> sein (er muss auch nicht fortlaufend sein).
Einfach auf submit klicken und testen, was für Werte bei welcher Auswahl ankommen. Bei Fragen, bitte direkt posten, damit ich Unklarheiten auch im Skript ausräumen kann.
Edit: Bitte auch diese Neufassung einer verschachtelten Auswahl beachten:
http://www.php.de/tutorials/43433-ht...tml#post468567
lange Rede kurzer Sinn, habe eben in einen anderen Forum diesen Code-Schnipsel gepostet, der kann eigentlich auch gleich hier ins Tutorial, weil die Frage so oft vorkommt.
Und zwar:
Wie mache ich das, dass eine <select> Auswahl eine weitere <select> Auswahl anzeigt, deren Daten direkt von der Auswahl abhängen.
Code:
<html> <head> <title></title> <script type="text/javascript"> var mygroup = new Array(); // reset mygroup[0] = new Array(); mygroup[0][0] = new Option("Bitte wählen Sie zunächst eine Sprache.", 0); // deutsch mygroup[1] = new Array(); mygroup[1][0] = new Option("eins", 2); mygroup[1][1] = new Option("zwei", 4); mygroup[1][2] = new Option("drei", 8); // englisch mygroup[2] = new Array(); mygroup[2][0] = new Option("one", 1); mygroup[2][1] = new Option("two", 3); mygroup[2][2] = new Option("three", 9); // spanisch kann ich nicht // französisch (eigentlich auch nicht) mygroup[40] = new Array(); mygroup[40][0] = new Option("un", 5); mygroup[40][1] = new Option("deux", 50); mygroup[40][2] = new Option("trois", 500); // mygroup[ZB_PRIMARY_KEY_SELECT][FORTLAUFENDE_ZAHLEN_AB_0] = new Option(OPTION_TEXT, ZB_PRIMARY_KEY_SUBSELECT) // alle <option>s des sub-<select> entfernen function ResetSubSelect(form, subSelect) { var e = form.elements[subSelect]; for (var i = 0; i < e.options.length; ++i) { e.options[i] = null; } } // übergebenes Element (sub-<select>) deaktivieren function DisableSubSelect(elem) { elem.disabled = 1; } // übergebenes Element (sub-<select>) aktivieren function EnableSubSelect(elem) { elem.disabled = 0; } // tritt bei onchange in Kraft, bzw. bei der Initiierung function ShowSubSelect(elem, subSelect) { // alle <option>s des sub-<select> entfernen (reset) ResetSubSelect(elem.form, subSelect); // welcher value wurde ausgewählt var i = elem.options[elem.selectedIndex].value; // sub-<select> var s = elem.form.elements[subSelect]; // dem <sub>-select die <option>s aus mygroup zuordnen for (var k = 0; k < mygroup[i].length; k++) { s.options[k] = mygroup[i][k]; } // war die ausgewählte value 0? dann sub-<select> deaktivieren if (i == 0) { DisableSubSelect(s); } else { EnableSubSelect(s); } } function InitSubSelect() { // leeres sub-<select> mit mygroup[0] füllen ShowSubSelect(document.forms["myform"].elements["myselect"], "mysubselect"); } </script> </head> <body onload="InitSubSelect()"> <form action="" method="get" name="myform"> <select name="myselect" onchange="ShowSubSelect(this,'mysubselect')"> <option value="0">Bitte wählen Sie eine Sprache.</option> <option value="1">deutsch</option> <option value="2">englisch</option> <option disabled="disabled" value="3">spanisch</option> <option value="40">französisch</option> </select> <select name="mysubselect" disabled="disabled"> </select> <input type="submit" /> </form> </body> </html>
Einfach den JavaScript-Array mygroup mit einer PHP-Schleife generieren.
Die 1. Dimension von mygroup steht für den Primärschlüssel der 1. Auswahl. Er muss nicht fortlaufend sein.
Die 2. Dimension von mygroup ist eine fortlaufenden Zahl, beginnend mit 0 (also einfach den PHP-Schleifen-Zähler reinbraten).
new Option(text, value)
text steht hierbei für den sichtbaren Text im sub-<select>, value könnte der Primärschlüssel einer verlinkten Tabelle des Haupt-<select> sein (er muss auch nicht fortlaufend sein).
Einfach auf submit klicken und testen, was für Werte bei welcher Auswahl ankommen. Bei Fragen, bitte direkt posten, damit ich Unklarheiten auch im Skript ausräumen kann.
Edit: Bitte auch diese Neufassung einer verschachtelten Auswahl beachten:
http://www.php.de/tutorials/43433-ht...tml#post468567
Kommentar