Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Select Optionen automatisch füllen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Select Optionen automatisch füllen

    Hallo zusammen,

    ich habe eine kleine Funktion geschrieben, leder funktioniert sie nicht ganz, ich möchte folgendes erreichen:

    wenn eine Höhe im "shoehe" feld ausgewählt wurde:

    1. soll der passende Hinweistext "Ordnerebene" angezeigt werden (funktioniert)
    2. soll im neuen select feld "sebene" die passende Optionen automatisch gefüllt werden (funktioniert leider nicht)

    PHP-Code:
    <script language="javascript"

    function 
    ebene(hoehe


    var 
    sebene document.anfrage.sebene
    sebene.options.length 0

    var 
    hoehe_nums_str "1500|2000|2500|3000";
    var 
    hoehe_numbers hoehe_nums_str.split("|");

    var 
    ordnerebene_nums_str "4|5|6|7";
    var 
    ordnerebene_numbers ordnerebene_nums_str.split("|");

    var 
    minebene_nums_str "3|4|5|6";
    var 
    minebene_numbers minebene_nums_str.split("|");

    var 
    maxebene_nums_str "12|16|20|24";
    var 
    maxebene_numbers maxebene_nums_str.split("|");

    for (
    i=0i<hoehe_numbers.lengthi++) {
        
        if (
    hoehe_numbers[i] == hoehe) {
            
    oe.innerHTML = ("Hinweis: Platz für bis zu " ordnerebene_numbers[i] + " Ordnerebenen ohne Abschlußboden");
            
            for (var 
    op minebene_numbers[i]; op <= maxebene_numbers[i]; op++) {
                
    sebene.options[sebene.options.length] = new Option(op);
                }
          }
        }

    </script> 
    Ausgabe

    PHP-Code:
    <form action="#" method="post" name="anfrage">

    Höhe 
    <select name="shoehe" size="1" onChange="ebene(shoehe.options[shoehe.selectedIndex].value);">
      <
    option value="">Bitte wählen</option>
      <
    option value="1500">1500 mm</option>
      <
    option value="2000">2000 mm</option>
      <
    option value="2500">2500 mm</option>
      <
    option value="3000">3000 mm</option
    </
    select>
    <
    span id="oe"></span>

    <
    br />

    Ebenen 
    <select name="sebene" size="1">
    <
    option value="">-</option
    </
    select>

    <
    br />
    </
    form
    Auf jeden Tipp wäre ich sehr dankbar.


  • #2
    Auf jeden Tipp wäre ich sehr dankbar.
    - Fehlermeldungen??! (z.b. im Firefox in die console schauen).
    Falls du nicht sagen kannst, wo es hakt, gib uns doch einen testlink.
    - Verwende irgendein JS-Framework deiner Wahl
    I like cooking my family and my pets.
    Use commas. Don't be a psycho.
    Blog - CoverflowJS

    Kommentar


    • #3
      danke für den Tipp!

      ich konnte einen anderen Fehler beheben:

      oe.innerHTML habe ich geändert in document.getElementById("oe").innerHTML

      das Problem "die passende Optionen automatisch füllen" besteht immer noch:

      test2

      wenn ich diesen Teil ändere
      PHP-Code:
      for (var op minebene_numbers[i]; op <= maxebene_numbers[i]; op++) 
      in:
      PHP-Code:
      for (var op 3op <= 12op++) { 
      dann funktioniert es:
      test1

      das behebt das Problem leider nicht, da die passende Optionen angezeigt werden sollen:

      wenn höhe 1500 -> dann zeige select optionen von 3 bis 12
      wenn höhe 2000 -> dann zeige select optionen von 4 bis 16
      ....

      Kommentar


      • #4
        PHP-Code:
        for (var op minebene_numbers[i]; op <= maxebene_numbers[i]; op++) 
        Das Problem an dieser Stelle ist, dass du keine Zahlen in minebene_numbers und maxebene_numbers stehen hast, sondern Strings.

        Wird bspw. die Höhe 1500mm ausgewählte, dann ist i=0 und damit minebene_numbers[0] gleich "3" und maxebene_numbers[0] gleich "12".

        Schon bei der ersten Überprüfung der Schleifenbedingung ergibt "3" < "12" aber falsch, weil bei einem Stringvergleich die "3" natürlich größer ist als die "12", schliesslich ist das erste Zeichen von "3" größer als das erste Zeichen von "12".
        Also wird die Schleife überhaupt nicht durchlaufen.


        Entweder legst du minebene_numbers und maxebene_numbers gleich als Arrays von Zahlen an, oder du wandelst die Strings nach dem Splitten in Zahlen um (das geht mit parseInt).

        Kommentar


        • #5
          Ich danke dir vielmals für die wunderbare Erklärung und Lösung!

          Kommentar

          Lädt...
          X