alkativo: Formulare in Firefox

Hallo,

ich habe eine kleine Funktion zum überprüfen von Checkbosen geschrieben. Die wird onClick ausgeführt. Dabei übergebe ich einen Wert.

Beispiel:

onClick=checkabt(5) steht im Checkboxtag.

Die Funktion

function checkabt(a){
     x=self.document.f2.elements[a].value;
     alert(x);
}

Funktioniert im IE aber nicht bei Firefox. Der sagt f2 is not defined.

Meine Frage, wie schaffe ich es das der Firefox f2 kennt? Oder kann ich Formulare auch dynamisch ansprechen, b.B.

x=self.document.form[0].elements[a].value;

Vielen Dank
al

  1. Moin!

    Beispiel:

    onClick=checkabt(5) steht im Checkboxtag.

    Da sollte besser onclick="checkabt(5)" stehen. Erstens: Attribut durchgehend klein ist besser (wird in XHTML zwingend gefordert, in HTML ist es nicht falsch, sich schon mal dran zu gewöhnen). Zweitens: Alles, was als Attributwert was anderes als nur Buchstaben oder nur Zahlen hat, muß in Anführungszeichen eingeschlossen werden, sonst kommen Browser schon mal durcheinander, wo das Ende des Attributs ist.

    Die Funktion

    function checkabt(a){
         x=self.document.f2.elements[a].value;
         alert(x);
    }

    Funktioniert im IE aber nicht bei Firefox. Der sagt f2 is not defined.

    Kannst du eine Minimalseite mit dem Formular, zwei Checkboxen und genau dieser  Funktion erstellen, prüfen, ob es damit immer noch nicht geht, und dann davon den Quelltext posten?

    Eigentlich hat Firefox nämlich keine Probleme mit deiner Zugriffsart, also wird irgendwo anders ein Fehler sein.

    • Sven Rautenberg
    1. Hallo,

      ich poste das gleich. Ich mache das eben fertig.

      1. Hier die Funktion

        function checkabt(a){
        x=self.document.f2.elements[a].value;
        if (f2.elements[a].checked==true){
        alert (x);
        }
        }

        und der html code

        <form name="f2" method="post" action="">
           <input name="" type="checkbox" value="wert" onclick="checkabt(0)">
              </form>

        1. function checkabt(a){
          x=self.document.f2.elements[a].value;
          if (f2.elements[a].checked==true){

          window.f2 existiert nicht.

          <form name="f2" method="post" action="">
             <input name="" type="checkbox" value="wert" onclick="checkabt(0)">

          Du wilst eigentlich auf this zugreifen:

          <input
          type="checkbox" value="wert" onclick="alert(this.value +'/'+ this.checked);">

          Struppi.

          1. Nun leider brauche ich sowohl die Zahl die ich übergebe, als auch den value. Den ändere ich dann. Hier ist nur das eigentliche Problem gepostet. Insgesamt ist es wesentlich komplexer.

            1. Moin!

              Nun leider brauche ich sowohl die Zahl die ich übergebe, als auch den value. Den ändere ich dann. Hier ist nur das eigentliche Problem gepostet. Insgesamt ist es wesentlich komplexer.

              Das ist das nervige: Eigentlich bestehen vollkommen andere Probleme (nämlich Integrationsprobleme der hier vorgeschlagenen Lösungen), weil das Problem vereinfacht wird und man sich dann logischerweise in Unkenntnis des Rattenschwanzes was nettes ausdenkt, was wegen der weggelassenen Umstände nie funktionieren kann...

              Naja, "this" funktioniert hier aber trotzdem:

              function whatever(formfield) { alert(formfield.name+" enthält "+formfield.value); }

              <input ... onclick="whatever(this)">

              • Sven Rautenberg
              1. Vielen Dank, ich werde es gleich probieren.

                1. Ok das klappt echt gut. Wie kann ich denn jetzt andere Formularelemente mit js ändern. Beispielsweise

                  f2.elements[2].checked=true;

                  Dann kann ich auch wieder weiter machen ;-))

                  1. Moin!

                    Ok das klappt echt gut. Wie kann ich denn jetzt andere Formularelemente mit js ändern. Beispielsweise

                    f2.elements[2].checked=true;

                    Dann kann ich auch wieder weiter machen ;-))

                    http://de.selfhtml.org/javascript/objekte/elements.htm#form

                    Das Element, welches du mit this als Objekt in die Funktion übergibst, hat eine ganze Reihe von spannenden Eigenschaften und Methoden - auch der Zugriff auf das enthaltende Formular ist möglich, und von dort gehts wie gewohnt weiter auf alle im Formular enthaltene Elemente.

                    • Sven Rautenberg
                  2. Hallo alkativo

                    Ok das klappt echt gut. Wie kann ich denn jetzt andere Formularelemente mit js ändern. Beispielsweise

                    f2.elements[2].checked=true;

                    window.f2 ist nach wie vor nicht definiert (du meinst document.f2) aber du kannst mit this auch auf die anderen Elemente des gleichen Formulares zugreifen. this hat das Attribut this.form und enthält die Referenz auf das Formular.

                    Struppi.

  2. Beispiel:

    onClick=checkabt(5) steht im Checkboxtag.

    Steht die Checkbox im gleichen Formular, wie das Element was du ansprechen willst? Dann verwende this.form

    Die Funktion

    function checkabt(a){
         x=self.document.f2.elements[a].value;
         alert(x);
    }

    Du solltest globale Variabeln vermeiden.

    Funktioniert im IE aber nicht bei Firefox. Der sagt f2 is not defined.

    Was ist f2 und wie hast du das deklariert?

    Struppi.