fotzibaer: abhängige select box befüllen aus array

Hallo zusammen,
ich habe folgendes Problem und bin am Verzweifeln: Habe zu dem oben genannten Thema zwar schon einige Artikel gefunden, aber irgendwie nicht so genau funktionierend...

Ich habe zwei Selectboxen in einem Formular: Die Befüllung der zweiten ist von der Auswahl in der ersten abhängig. Befüllt werden beide aus einer Datenbank.
Die erste Selectbox enthält als values IDs. Die zweite Selectbox enthält als values ebenfalls IDs, aber aus der db frage ich auch noch ein Feld related_to ab worüber die beiden selectboxen verknüpft sind.

Idee war folgende:
Selectbox 1
<select ...ganz normal aus db befüllt ...onchange=js_fill2nd(this[this.selectedIndex].value)>

Dann eine Javascript was einen Javascript Array befüllt mit den Werten der 2ten Selectbox:
<script>
var items = new Array();
 <%
 Dim intCount
 intCount=0
  while not rs.eof
  response.write "items["&intCount&"]=('"&rs(1)&"','"&rs(0)&"','"&rs(2)&"','"&rs(3)&"',)"
  intCount=intCount+1
  rs.Movenext
   wend
 %>
</script>

Und danach soll direkt ohne Reload der Page die zweite select box befüllt werden. Das erste Element im Array enthält den value für die Selectbox, das zweite und dritte sollen als Text angezeigt werden und das letzte Element des Arrays enthält die ID in relation zu dem in Selectbox1 ausgewählten Wert.(Bspl: in Selectbox 1 ist der wert "5" ausgewählt; alle Reihen des Arrays, wo das vierte Element  "5" ist sollen angezeigt werden....)

Geht das überhaupt so? Wer kann mir Denkanstöße geben? Wer kann mir ggf. Links zu Scripts geben, die das können?

Gruss & Dank,
fotzibaer

  1. Hallo,
    ja habe einige logische Fehler gefunden und noch weiter recherchiert. Bin schon recht weit gekommen - habe nur ein Problem:
    Ohne Reload scheint es nicht zu funktionieren?!? (Ich dachte Javascript als clientseitige Sprache...)

    Folgendes habe ich jetzt:

    Selectbox1:
    <select name="responsible_group" size="1" onChange="set_groupbox(this[this.selectedIndex].value);" >

    Selectbox2:
    <select name="group" size="1">
    ...rs Abfrage in VBScript...
    <script type="text/JavaScript">
    <!--
    //declare your arrays...
     var abbrev = new Array();
     var group_id = new Array();
     var title = new Array();
     var rel_to = new Array();
    <%
     Dim intCount
     intCount=0
      while not rs.eof
      response.write "abbrev["&intCount&"]='"&rs(0)&"';"&vbcrlf
      response.write "group_id["&intCount&"]="&rs(1)&";"&vbcrlf
      response.write "title["&intCount&"]='"&rs(2)&"';"&vbcrlf
      response.write "rel_to["&intCount&"]="&rs(3)&";"&vbcrlf
      intCount=intCount+1
      rs.Movenext
       wend
     %>
     function set_groupbox(res_group_id)
    {
    for (var i=0; i<rel_to.length; i++)
     if (rel_to[i]==res_group_id )
     {
     document.write("<option value="+group_id[i]+">"+abbrev[i]+" - "+title[i]+"</option>");
     }
     else
     {
     document.write("");
     }
    }
    -->
    </script>
    </select>

    Was ist jetzt noch falsch?

    Gruss,
    fotzibaer

    1. ach fotzibaer,

      ich habe mir den ganzen salat erst garnicht angesehen. aber du benutzt offensichtlich variablen aus php zum setzen der werte in der abhängigen selectbox.
      du möchtest in einer 2. selectbox auswahlen anbieten, welche als unterauswahl der 1. selectbox dienen.

      die daten sind in einer db.

      wenn du erst nur die 1. selectbox befüllst, kannst du die 2. selectbox nicht ohne nachlesen der werte aus der db befüllen. ergo: neue übertragung.

      dies möchtest du aber nicht. daher müssen die werte der 2. selectbox bereits auf dem client vorhanden sein.

      deshalb mußt du die gesamten auswahlen der 1. und 2. selectbox aus der db lesen, und am besten in einer baumstruktur erstellen, welche auf dem client angesprochen werden können. php variablen nützen da nichts.

      dann kann beim onchange im 1. select die 2. box mit den entsprechenden werten befüllt werden.

      trickreicher wäre es wohl, die 2. box mit allen möglichen werten zu füllen, also alle werte, welche sich als unterwerte aller auswahlmöglichkeiten der 1. box ergeben, und mit css die nicht aktiven auszublenden mit display:none. oder anders herum: die 2. selectbox mit allen werten füllen, wobei display:none gesetzt wird, und bei onchange der 1. box die entsprechenden subwerte sichtbar gemacht werden.