gizzy: Anwendung Onchange-Ereignis bei Auswahllisten

Hallo,

ich komme irgendwie beim onchange-Ereignis von Auswahllisten nicht weiter.

Folgende Ausgangslage: asp-Seite mit VBScript-Inhalten

Folgendes Ziel: Zwei Auswahllisten, in beiden sollen Zahlenwerte ausgewählt werden. Nun möchte ich dynamisch prüfen ob die Werte Sinn machen. Z.b muss der zweite Wert grösser als der erste sein. Ist dies nicht der Fall soll der User optisch über die falsche Eingabe informiert werden( z.b. durch roten Rahmen um die Auswahlliste oder Msg-Box) Ist das über das onchange-Ereignis ohne die Seite neu laden zu müssen überhaupt machbar?

Gruß
gizzy

  1. Mahlzeit gizzy,

    Folgende Ausgangslage: asp-Seite mit VBScript-Inhalten

    Irrelevant.

    Nun möchte ich dynamisch prüfen ob die Werte Sinn machen.

    Clientseitig oder auf dem Server nach Absenden des Formulars?

    Ist das über das onchange-Ereignis ohne die Seite neu laden zu müssen überhaupt machbar?

    Also clientseitig. Ja, es ist machbar. Allerdings nur als zusätzliche Hilfe empfehlenswert - die Werte sollten zu allererst und vor allem auf dem Server auf Sinnhaftigkeit überprüft werden, da jegliche clientseitige Prüfung umgangen werden kann.

    Notiere einfach im "onchange"-Eventhandler geeigneten Code, der die Werte der beiden Formularelemente miteinander vergleicht und sie je nach Ergebnis umformatiert (sinnvollerweise durch Setzen/Entfernen entsprechender Klassen, deren Aussehen Du mittels CSS festlegen kannst).

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo EKKi,

      die Prüfung soll clientseitig erfolgen. Dabei soll es wie von dir erwähnt nur eine zusätzliche Hilfe sein.

      Notiere einfach im "onchange"-Eventhandler geeigneten Code, der die Werte der beiden Formularelemente miteinander vergleicht und sie je nach Ergebnis umformatiert (sinnvollerweise durch Setzen/Entfernen entsprechender Klassen, deren Aussehen Du mittels CSS festlegen kannst).

      hmm, genau an der Stelle komme ich nicht weiter. Brauche ich dazu einen Funktionsaufruf? Oder wie müsste/könnte die syntax aussehen?

      Gruß
      gizzy

      1. Hi,

        Notiere einfach im "onchange"-Eventhandler geeigneten Code, der die Werte der beiden Formularelemente miteinander vergleicht und sie je nach Ergebnis umformatiert (sinnvollerweise durch Setzen/Entfernen entsprechender Klassen, deren Aussehen Du mittels CSS festlegen kannst).

        hmm, genau an der Stelle komme ich nicht weiter.

        Womit *genau* nicht?
        Ohne bessere Beschreibung kommen wir hier nicht weiter - </hilfe/charta.htm#tipps-fuer-fragende>

        Brauche ich dazu einen Funktionsaufruf?

        Es waere empfehlenswert, den Code in eine Funktion auszulagern, ja.

        Oder wie müsste/könnte die syntax aussehen?

        Schau dir zunaechst in SELFHTML an, wie man auf Selectfelder und ihre Options zugreift.

        Wenn du Probleme mit der Umsetzung hast, stelle *konkrete* Fragen - aber bitte kein "bekomme ich nicht hin" oder "hab keinen Schimmer, wie ..."

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hi Chris,

          dann will ich mal genauer versuchen zu erklären wodran es scheitert.
          Was ich z.b. hinbekommen habe, ist über das OnChange-Ereignis den gewählten index in ein Textfeld zu übertragen. So weit so gut. Das war allerdings mehr für mich fürs Verständis als das es mit meinem eigentlichen Ziel zu tun hat:

          <select name="Wert2"  onchange="this.form.Ausgabe.value = this.options[this.selectedIndex].value">
          <option value=1>Ein Eintrag</option>
          .
          .
          .
          </select>

          Was mich grundsätzlich noch verwirrt ist das eigentlich sämtliche Beispiele , so z. B auch dein Link immer in Janvascript gehalten sind. Damit habe ich noch gar nichts gemacht. Ich möchte das ganze mit VBScript machen, da ich bereits einige Datenbankabfragen über VBScript mache. Daher habe ich ein Problem, wie ich die Beispiele auf VBScript übertragen kann.

          Als nächstes ist mir noch nicht 100% klar, ob ich in das onchange-ereignis auch eine If/Then-Anweisung unterbringen kann. Also sowas wie(die frei gewählte Syntax soll natürlich nur grundsätzlich darstellen was ich meine;)):

          onchange="if wert2(Auswahlliste2) < wert1(Auswahlliste1) then alert("Wert2 muss grösser sein") end if"

          Ausserdem ist es mir noch nicht gelungen über das OnChange eine Funktion aufzurufen. Also so wie mein erstes Beispiel nur halt das Schreiben in ein Textfeld über eine Funktion

          <select name="Wert2" onchange="Ueberpruefung()">
          <option value=1>Ein Eintrag</option>
          .
          .
          .
          </select>

          Public function Ueberpruefung()
            this.form.Ausgabe.value = this.options(this.selectedIndex).value
          end function

          Ich hoffe ich konnte es ein wenig klarer machen, wo mein Problem liegt:)

          Gruß
          gizzy

          1. Was mich grundsätzlich noch verwirrt ist das eigentlich sämtliche Beispiele , so z. B auch dein Link immer in Janvascript gehalten sind.

            Ja, clientseitig setzt man üblicherweise JavaScript sein.

            Damit habe ich noch gar nichts gemacht.

            Wenn du mehr als einen Browser bedienen willst, solltest du Javascript verwenden. VBScript kennt nur der MSIE unter gewissen Umständen.

            Ich möchte das ganze mit VBScript machen

            Warum?

            da ich bereits einige Datenbankabfragen über VBScript mache.

            Ja, vermutlich SERVERseitig. Das hat wie gesagt mit clientseitigen Scripting im Rahmen des HTML-Dokuments im Browser erstmal herzlich wenig zu tun.

            Als nächstes ist mir noch nicht 100% klar, ob ich in das onchange-ereignis auch eine If/Then-Anweisung unterbringen kann. Also sowas wie(die frei gewählte Syntax soll natürlich nur grundsätzlich darstellen was ich meine;)):

            onchange="if wert2(Auswahlliste2) < wert1(Auswahlliste1) then alert("Wert2 muss grösser sein") end if"

            Keine Ahnung, wie das mit VBScript geht, mit JScript geht es jedenfalls:

            onchange="if (...) { ...; ...; } else { ...; ...; }"

            <select name="Wert2" onchange="Ueberpruefung()">

            Public function Ueberpruefung()
              this.form.Ausgabe.value = this.options(this.selectedIndex).value
            end function

            this zeigt in dem Fall nicht auf das select-Elementobjekt, sondern auf window.
            Wenn du in der Funktion das select haben willst, solltest du es übergeben:
            onchange="Überprüfung(this)"
            Die Funktion nimmt das Element dann als ersten Parameter an, nenn ihn z.B. select. So gehts zumindest mit JavaScript.

            Mathias