Olli: Formular mit onchange

Ich bin zur Zeit an einer Datenbank am arbeiten, wo ich Formulare benutze um diese Daten wieder ab zu ändern. Mein Problem ist nun, das ich 2 select Felder habe eins Mit Etagen von Gebäuden und eins mit Raumnummern von Gebäuden, nun soll es aber passieren, das wenn man eine andere Etage auswählt sich auch dem entsprechend die Auswahl bei den Raumnummern ändert.

-------------------------
<html><head><title>Test</title>
<script type="text/javascript">
function CheckAuswahl () {
  if (document.Testform.Auswahl.selectedIndex == 2)
    document.Testform.Auswahl.options[2].text = "Thomas Mann";
}
</script>
</head><body>
<form name="Testform" action="">
<select name="Auswahl" size="5" onchange="CheckAuswahl()">
<option>Goethe</option>
<option>Schiller</option>
<option>Guildo Horn</option>
<option>Homer</option>
<option>Fontane</option>
</select>
</form>
</body></html>
-------------------------------
Nach dem Beispiel habe ich das mal versucht für einzelne Werte funktioniert das auch ganz gut, nur wie kann ich an der Stelle document.Testform.Auswahl.options[2].text eine erneuete Abfrage der Datenbank durchlaufen lassen und wie kann ich den Wert an der Stelle document.Testform.Auswahl.selectedIndex in einer verriablen abspeichern bzw. für eine Bedingung zum vergleich nutzen?

  1. Hi Olli!

    Ich bin zur Zeit an einer Datenbank am arbeiten

    Ich seh nix von einer Datenbank... wenn du allerdings dynamisch aus einer Datenbank für die Etagen(auswahl) html erzeugst und nach Etagenauswahl nun die Raumnummer wählen möchtest, so gibt es verschiedene Ansätze:

    1. Mittels Frames/IFrames kannst du (nach Etagenwahl) dein Formular abschicken und die Antwort (Serverside CGI) (Raumwahl) in dem (I)Frame schreiben (vergleiche hierzu "target" bei Formularen)

    2. Du hast bereits alle Raumnummern für alle Etagen in deiner Hauptseite mitgeschickt und die nicht aktuellen Raumnummer select blöcke z.B. mittels style="display:none;" ausgeblendet; nun musst du nach der erfolgten Etagen auswahl nur noch den entsprechenden selectblock auf z.B. style="display:inline" setzen.

    3. Du sendest nach der Anfrage (Etagenwahl) dein Formular ab.
    Dein Serverside CGI erzeugt sowohl Etagenauswahl als auch die durch die Etage vorgegebene Raumauswahl neu.

    wie kann ich den Wert an der Stelle document.Testform.Auswahl.selectedIndex in einer verriablen abspeichern (...)

    Wenn du Version 1 oder 3 wählst, dann wirst du den selected Index an dein CGI übermitteln müssen. Dieses kann dann ohne Probleme diesen Wert in deine (neugesendete) Seite codieren...

    Wenn du variante 2 wählst, dann seist du auf http://de.selfhtml.org/html/formulare/auswahl.htm#listen_absendewert
    verwiesen, anstelle von einem alert halt eine Funktion aufrufen...

    Grüsse,
    Richard

  2. hi,

    Nach dem Beispiel habe ich das mal versucht für einzelne Werte funktioniert das auch ganz gut, nur wie kann ich an der Stelle document.Testform.Auswahl.options[2].text eine erneuete Abfrage der Datenbank durchlaufen lassen und wie kann ich den Wert an der Stelle document.Testform.Auswahl.selectedIndex in einer verriablen abspeichern bzw. für eine Bedingung zum vergleich nutzen?

    Verkettete Auswahllisten erklärt das Prinzip.
    Wenn du die Daten bei Änderung dynamisch nachladen willst, beschäftige dich mit "AJAX". Alternative wäre, alle Daten direkt zu laden, bspw. in einem Javascript-Array abgelegt - und daraus dann die zur jeweligen Auswahl gehörenden auszulesen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke schonmal für eure Hilfe, bin nun auch ein Stück weiter gekommen was mein Problem an geht.

      Habe das ganze jetzt mal mit Javaskript und den Verketteten Auswahllisten versucht.

      var terminAuswahl = {
        'Etage' : {
          '23' : ['23'],
          '24' : ['24'],
          '25' : ['25'],
          '26' : ['26'],
          '27' : ['27']
        },

      'Raum' : {

      '23' : [
            ['l55', 'Katzen in der freien Wildbahn'],
            ['l56', 'Katzen im Gefängnis'],
            ['l56', 'Katzen in Australien']
          ],

      '24' : [
            ['l65', 'Hunde im Himmel'],
            ['l66', 'Hunde in der Hölle'],
            ['l66', 'Höllenhunde']
          ],

      '25' : [
            ['l75', 'Wirtschaftskram I'],
            ['l76', 'Wirtschaftskram II'],
            ['l76', 'Wirtschaftskram III']
          ],

      '26' : [
            ['l85', 'Technologie in der Steinzeit'],
            ['l86', 'Technologie in der Bronzezeit'],
            ['l86', 'Technologie heute']
          ],

      '27' : [
            ['l95', 'Althochdeutsch'],
            ['l96', 'Mittelhochdeutsch'],
            ['l96', 'Deutsch für Angefangene']
          ]
        }
      };

      Da ich noch am ausprobieren bin, stehen hier erstmal die Werte aus dem Bsp.

      Um nochmal klar zu sagen, was passieren soll, ich habe verschiedene Gebäude und will die Anzahl der Etagen (durch die verschiedenen gebäude gibt es leider auch unterschiedlich viele Stockwerke) aus der Datenbank auslesen... dann soll nach Auswahl der Etage eine Raumnummer ausgewählt werden (auswahl hängt ab von der Etage)... mit festen Etagen und Räumen funktioniert das auch, nur habe ich keine Ahnung wie ich das anhand der Datenbank realisieren kann.

      In der Oberen datei weiss ich ja vorher nicht die Anzahl der Etagen, sprich das müsste irgendwie automatisch generiert werden und genau das selbe gilt dann auch für die Raumnummern nur wie kann ich so was realisieren?

      1. hi,

        In der Oberen datei weiss ich ja vorher nicht die Anzahl der Etagen, sprich das müsste irgendwie automatisch generiert werden und genau das selbe gilt dann auch für die Raumnummern nur wie kann ich so was realisieren?

        Frage die Etagen zum jeweils ausgewählten Gebäude, und anschliessend die Raumnummern zum gewählten Gebäude und Etage vom Server ab.

        Übergabe von Parametern per GET/POST setze ich mal als bekannt voraus, und das Stichwort AJAX fiel bereits.

        Ob du einmal abgefragte Werte dann auch noch "cachen" willst, so dass bei wiederholter Auswahl eines zuvor schon mal ausgewählten Gebäudes bzw. einer Gebäude-Etagen-Kombi die Werte nicht noch mal vom Server erfragt werden müssen, bleibt dir überlassen.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }