Patrick: Radiobutton auf checked setzen

Hi Forum,

wie kann ich in einer Tabelle auf onclick auf die Zeile den zugehörigen Radiobutton auf checked setzen?
Das:
document.form1.button[<? echo $i;?>].checked == true

hat nicht funktioniert?

Woran kanns liegen?

Danke
Patrick

  1. moin Patrick :)

    Das:
    document.form1.button[<? echo $i;?>].checked == true

    hat nicht funktioniert?

    Versuchs mal mit document.form1.elements[<? echo $i;?>].checked == true

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. Versuchs mal mit document.form1.elements[<? echo $i;?>].checked == true

      Nachtrag: Wenn du die "checked" nicht vergleichen sondern setzen willst darfst du natürlich nur ein "=" schreiben.

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    2. Hi Lina,

      nein, das war nix ;-)

      Bye
      Patrick

      1. moin Patrick :)

        nein, das war nix ;-)

        Warum?
        Fehlermeldungen?
        Debugging?

        liebe Grüße aus Berlin
        lina-

        --
        Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
        1. Hi Lina,

          also in meinem fertigen Quelltext steht folgendes drin:

          <tr name="rowno188" onclick="window.document.form.ids[188].checked = true;">
              <td><input type="radio" name="ids[]" value="188">&nbsp;</td>
              <td class="txt">--Text--</td>
          </tr>

          Das ganze Konstrukt ist in einer Tabelle, wobei die Zeilen dynamisch mit  einer do while Schleife in PHP erzeugt werden. Die 188, die du überall siehst ist vom Script da eingetragen.
          window.document.form ist der Name meines Formulars, natürlich nur der Bezeichner .form ;-)
          Ich hab noch nen IFrame im gleichen Fenster, kann das was machen?
          Kannst du da jetzt nen Fehler erkennen?

          Danke
          Patrick

          1. moin Patrick :)

            <tr name="rowno188" onclick="window.document.form.ids[188].checked = true;">
                <td><input type="radio" name="ids[]" value="188">&nbsp;</td>
                <td class="txt">--Text--</td>
            </tr>

            Kannst du da jetzt nen Fehler erkennen?

            Jep - kann ich :)
            name="ids[]" ist falsch. Hier muss es heissen: name="ids"

            Es sei denn du tust irgendwelche seltsamen Dinge mit PHP von denen ich keine Ahung habe ;) Falls dieser Tip auch nicht zielführend ist, müsstest du mal erklären, wie du zu deinem "fertigen Code" kommst.

            liebe Grüße aus Berlin
            lina-

            --
            Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
            1. Hi Lina,

              hab ich geändert, es tut sich jedoch nichts.
              Der Code wird eigentlich nur in einer Schleife erzeugt, ist so als wenn ich es ganz oft von Hand schreibe, nur einfacher ;-)
              Wenn ich das onclick mit ids[188] anspreche, ist das korrekt, weil im intput hat ids ja keine Nummer.

              Danke
              Patrick

              moin Patrick :)

              <tr name="rowno188" onclick="window.document.form.ids[188].checked = true;">
                  <td><input type="radio" name="ids[]" value="188">&nbsp;</td>
                  <td class="txt">--Text--</td>
              </tr>

              Kannst du da jetzt nen Fehler erkennen?

              Jep - kann ich :)
              name="ids[]" ist falsch. Hier muss es heissen: name="ids"

              Es sei denn du tust irgendwelche seltsamen Dinge mit PHP von denen ich keine Ahung habe ;) Falls dieser Tip auch nicht zielführend ist, müsstest du mal erklären, wie du zu deinem "fertigen Code" kommst.

              liebe Grüße aus Berlin
              lina-

              1. moin Patrick :)

                hab ich geändert, es tut sich jedoch nichts.
                Der Code wird eigentlich nur in einer Schleife erzeugt, ist so als wenn ich es ganz oft von Hand schreibe, nur einfacher ;-)

                Na zeig doch mal die Schleife... *dir alles aus der Nase popel*

                Wenn ich das onclick mit ids[188] anspreche, ist das korrekt, weil im intput hat ids ja keine Nummer.

                Häh?

                Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked. Hier verwirrt einfach diese doppelte Klammer.
                Vorrausgesetzt deine Form heisst auch "form"!

                liebe Grüße aus Berlin
                lina-

                --
                Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                1. Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked.

                  nein, das geht so nicht.

                  Komplett ausgeschrieben kann man auf die Elemente so zugreifen:
                  document.forms['form'].elements['ids[]'][index]

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. moin Struppi :)

                    Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked.

                    nein, das geht so nicht.

                    Du möchtest mir also sagen, dass das folgende Beispiel aus der Doku falsch ist?

                      
                    <html><head><title>Test</title>  
                    </head><body>  
                    <form name="Formular" action="" method="get">  
                    <input type="radio" name="Favoriten" value="Heino">  
                    <input type="radio" name="Favoriten" value="Gildo">  
                    <input type="radio" name="Favoriten" value="Marianne">  
                    </form>  
                    <script type="text/javascript">  
                    document.Formular.Favoriten[2].checked = true;  
                    </script>  
                    </body></html>  
                    
                    

                    Was ich freilich zurücknehme ist das "nur". Ich bin darauf eingegangen, dass Patrick die Elemente über ihren Namen ansprechen möchte (weil er ja meinen Tipp über die Collection nicht weiter beachtet/vertieft hat).

                    liebe Grüße aus Berlin
                    lina-

                    --
                    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                    1. Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked.

                      nein, das geht so nicht.

                      Du möchtest mir also sagen, dass das folgende Beispiel aus der Doku falsch ist?

                      nein, wieso?
                      ich möchte nur sagen, dass dein Codeschnispsel falsch ist.

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. moin Struppi :)

                        Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked.

                        nein, wieso?
                        ich möchte nur sagen, dass dein Codeschnispsel falsch ist.

                        Das möchte ich gern anhand des Beispiels näher erklärt haben. Mir ist klar, dass das so nicht funktioniert (wegen der Klammer) - aber genau darauf wollte ich ja hinaus (dass die Klammer stört).
                        Wo also wäre der Fehler?
                        Nehmen wir als Namen einfach mal "test" an. Dann wäre die Zeile document.form.test[188].checked=true. Was ist daran anders als im Beispiel?

                        liebe Grüße aus Berlin
                        lina-

                        --
                        Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                        1. Nehmen wir als Namen einfach mal "test" an. Dann wäre die Zeile document.form.test[188].checked=true. Was ist daran anders als im Beispiel?

                          Das der Name (in der ursprünglichen Frage) "test[]" lautet.

                          Da aber die Klammer bereits Operatoren sind dürfen diese nicht in Variabel- oder Attributnamen vorkommen. Dass läßt sich aber durch genau diese Operatoren umgehen.

                          <form name="form" ...>
                          <input name="test[]">
                          <input name="test[]">
                          </form>

                          ==>

                          document.forms['form'].elements['test[]']
                          oder
                          document.forms.form.elements['test[]']
                          oder
                          document['form']['test[]']
                          oder
                          document.form['test[]']

                          Aber nicht:
                          document.form.test[]

                          Da es kein Element mit dem Namen 'test' gibt

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)
                          1. moin Struppi :)

                            Aber nicht:
                            document.form.test[]

                            Da es kein Element mit dem Namen 'test' gibt

                            Was anderes habe ich doch gar nicht gesagt! Vielleicht habe ich mich über die zwei Postings hinweg nicht deutlich genug ausgedrückt.... aber meine Aussage entspricht genau deiner.

                            liebe Grüße aus Berlin
                            lina-

                            --
                            Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                            1. Was anderes habe ich doch gar nicht gesagt! Vielleicht habe ich mich über die zwei Postings hinweg nicht deutlich genug ausgedrückt.... aber meine Aussage entspricht genau deiner.

                              Deine Aussage war:

                              Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked. Hier verwirrt einfach diese doppelte Klammer.

                              Diese ist falsch.

                              Du kannst so kein Element ansprechen. Zumal ein leerer Indexoperator einen Fehler wirft und du in keinem Formular ein 2-dimensonales Array (bzw. Collection) an Felder erstellen kannst.

                              Struppi.

                              --
                              Javascript ist toll (Perl auch!)
                              1. moin Struppi :)

                                Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked. Hier verwirrt einfach diese doppelte Klammer.

                                Diese ist falsch.

                                Du kannst so kein Element ansprechen. Zumal ein leerer Indexoperator einen Fehler wirft und du in keinem Formular ein 2-dimensonales Array (bzw. Collection) an Felder erstellen kannst.

                                Boah.. man kann es ja echt übertreiben mit der Genauigkeit. Wenn ich sage, dass die Klammer in dieser Aussage stört kann das doch für jemanden der nur wissen will warum er sein Ziel nicht erreicht, reichen.

                                Wieso musst du immer gleich alles als "falsch" hinstellen, was lediglich nicht 100% ausformuliert oder nicht absolut state-of-the-art ist?

                                liebe Grüße aus Berlin
                                lina-

                                --
                                Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                                1. Boah.. man kann es ja echt übertreiben mit der Genauigkeit. Wenn ich sage, dass die Klammer in dieser Aussage stört kann das doch für jemanden der nur wissen will warum er sein Ziel nicht erreicht, reichen.

                                  Eben nicht, weil es nicht zum Ziel führt.
                                  Die Schreibweise ist aus den genannten Gründen völlig falsch  (es ist ein zweidimensonales Array mit einem fehlenden index) sowohl vom Denkansatz als auch syntaktisch. Ich weiß nicht, wie eine völlig falsche Lösung zum Ziel führen soll.
                                  Selbst die Aussage "dass die Klammer stört" ist falsch. Die Klammer ist lediglich ein Zeichen dafür dass du eigentlich ein Array verwenden willst, d.h. sie stören nicht sondern bedeuten einfach etwas anderes.

                                  Wieso musst du immer gleich alles als "falsch" hinstellen, was lediglich nicht 100% ausformuliert oder nicht absolut state-of-the-art ist?

                                  Nein, es ist nicht nicht 100% ausformuliert oder nicht state-of-art es ist schlicht und einfach falscher Code.

                                  Wieso eigentlich immer?

                                  Struppi.

                                  --
                                  Javascript ist toll (Perl auch!)
                                  1. moin Struppi :)

                                    Selbst die Aussage "dass die Klammer stört" ist falsch. Die Klammer ist lediglich ein Zeichen dafür dass du eigentlich ein Array verwenden willst, d.h. sie stören nicht sondern bedeuten einfach etwas anderes.

                                    Ich redete davon, dass die Klammer _im Namen_ stört! Und somit der von Patrick angedachte Zugriff über den Namen so nicht funktioniert.

                                    Wieso eigentlich immer?

                                    Weil du das bei mir schon ein paar Mal gemacht hast.

                                    liebe Grüße aus Berlin
                                    lina-

                                    --
                                    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                                    1. Ich redete davon, dass die Klammer _im Namen_ stört! Und somit der von Patrick angedachte Zugriff über den Namen so nicht funktioniert.

                                      Ja, mag ja alles richtig sein, aber ich finde diese Aussage ....

                                      Wenn der Name deines Elements "ids[]" ist, kannst du das meines Wissens nur so ansprechen: document.form.ids[][188].checked.

                                      .... ist so eklatant falsch, dass es durchaus berechtigt sein muss darauf hinzuweisen. Du kannst nämlich eben nicht ein Element _so_ und auch nicht _nur_ (ich hab ja auch die anderen möglichen Wege genannt) ansprechen.

                                      Die eckige Klammer stört nicht, sondern auf diesem Wege bedeutet sie etwas anderes, aber es gibt ja genug andere Möglichkeiten, wo die eckige Klammer nicht stört.

                                      Wieso eigentlich immer?
                                      Weil du das bei mir schon ein paar Mal gemacht hast.

                                      Naja, wegen den paar Verbesserungsvorschlägen ;-)

                                      Struppi.

                                      --
                                      Javascript ist toll (Perl auch!)
                                  2. moin Struppi :)

                                    Nachtrag: versteh mich nicht falsch. Normalerweise begrüße ich es, dass meine Fehler korrigiert werden.
                                    Aber ich mag es nicht, wenn mir meine Wort im Mund umgedreht werden - um daraus etwaige Fehler herzuleiten.

                                    liebe Grüße aus Berlin
                                    lina-

                                    --
                                    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
          2. also in meinem fertigen Quelltext steht folgendes drin:

            <tr name="rowno188" onclick="window.document.form.ids[188].checked = true;">
                <td><input type="radio" name="ids[]" value="188">&nbsp;</td>
                <td class="txt">--Text--</td>
            </tr>

            Das ganze Konstrukt ist in einer Tabelle, wobei die Zeilen dynamisch mit  einer do while Schleife in PHP erzeugt werden. Die 188, die du überall siehst ist vom Script da eingetragen.

            Es gibt im Formulars document.form kein Array oder keine Collection 'ids' sondern nur (wenn es mehrere davon gibt) eine Collection mit dem Namen 'ids[]'

            So in etwa müßte es gehen:
            <tr onclick="window.document.form['ids[]'][188].checked = true;">

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. moin Struppi :)

              Es gibt im Formulars document.form kein Array oder keine Collection 'ids' sondern nur (wenn es mehrere davon gibt) eine Collection mit dem Namen 'ids[]'

              hmm? Kein Array?
              <cite>Checkboxen und Radio-Buttons bilden normalerweise Gruppen mehrerer zusammengehöriger Elemente, die einen gleichen Wert im name-Attribut haben und sich nur das value-Attribut unterscheiden. Solche Gruppen mit gleichen Namen bilden in JavaScript wiederum einen Array.</cite>

              liebe Grüße aus Berlin
              lina-

              --
              Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
              1. Es gibt im Formulars document.form kein Array oder keine Collection 'ids' sondern nur (wenn es mehrere davon gibt) eine Collection mit dem Namen 'ids[]'

                hmm? Kein Array?

                Jein
                Es ist ein Collection, was aber keinen grossen Unterschied tut.

                <cite>Checkboxen und Radio-Buttons bilden normalerweise Gruppen mehrerer zusammengehöriger Elemente, die einen gleichen Wert im name-Attribut haben und sich nur das value-Attribut unterscheiden. Solche Gruppen mit gleichen Namen bilden in JavaScript wiederum einen Array.</cite>

                Ja und der Name des Buttons ist 'ids[]' und nicht 'ids'

                Struppi.

                --
                Javascript ist toll (Perl auch!)
  2. Hi nochmal,

    erstmal danke an lina und Struppi! ;-)
    Wie gesagt, der Aufbau ist mir relativ egal, ich muss nicht im input den Namen mit eckigen Klammern schreiben. Ansprechen kann ich die Zeile auf onclick (Test mit alertbox). Nur wie ändere ich jetzt explizit den Status des Radiobutton. Alles, was die beiden (Danke) gepostet hatten, klappte nicht.

    Vielen Dank
    Patrick

    1. Wie gesagt, der Aufbau ist mir relativ egal, ich muss nicht im input den Namen mit eckigen Klammern schreiben. Ansprechen kann ich die Zeile auf onclick (Test mit alertbox). Nur wie ändere ich jetzt explizit den Status des Radiobutton. Alles, was die beiden (Danke) gepostet hatten, klappte nicht.

      Wenn das nicht klappt:
      <tr onclick="window.document.form['ids[]'][188].checked = true;">
      dann gibt es das 188 Element nicht.

      Existieren die Elemente 0-187?

      Struppi.

      --
      Javascript ist toll (Perl auch!)
    2. moin Patrick :)

      Ich bin mal auf meine erste Idee zurückgegangen:

        
      <form name="form">  
      <table border="1">  
      <tr name="rowno188" onclick="window.document.form.elements[0].checked = true;">  
          <td><input type="radio" name="ids" value="0">&nbsp;</td>  
          <td class="txt">--Text--</td>  
      </tr>  
      <!--weitere 187 Elemente-->  
      <tr name="rowno188" onclick="window.document.form.elements[188].checked = true;">  
          <td><input type="radio" name="ids" value="188">&nbsp;</td>  
          <td class="txt">--Text--</td>  
      </tr>  
      </table>  
      </form>  
      
      

      funktioniert wunderbar :)
      Jetzt musst du in deiner ominösen Schleife nur noch dafür sorgen, dass der Wert in der Klammer bei dem Javascript stimmt *g*

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hi Lina,

        so, das onclick Element funktioniert.
        Jetzt hab ich aber noch ein Problem:
        Ich zähle meine Schleife nach unten ab. Heisst: Ich zähle von z.B. 200 nach 0.
        Wenn ich jetzt den Wert 150 markiere, wird aber das 150. Element in meinem Javascript markiert, also genau anders herum.
        Kann ich da was drehen?

        Dank
        Patrick

        1. Wenn ich jetzt den Wert 150 markiere, wird aber das 150. Element in meinem Javascript markiert, also genau anders herum.
          Kann ich da was drehen?

          Vielleicht solltest du dir eine Funktion schreiben, die das gewünschte macht, so wie es momentan ist scheint mir das ganez auf 'gut Glück' programmiert zu sein, der Index der Collection ist dir anscheinend egal, was dich interessiert ist der value der radiobox.

          Die Funktion sähe dann z.b. so aus:

            
          function check(nummer)  
          {  
             var elements = document.form.elements['ids'];  
             for(var i = 0; i < elements.length; i++)  
             if(elements[i].value == nummer)  
             {  
              elements[i].checked = true;  
              return;  
             }  
          }  
          
          

          <tr onclick="check(188);">
          (übrigens ein TR element hat kein name Attribut)

          Struppi.

          --
          Javascript ist toll (Perl auch!)
          1. Hi Struppi,

            vielen Dank!!!!!
            Das wars.

            Dank euch beiden
            Patrick