Sasha: Checkbox-value-array über JS und PHP verarbeitbar machen

Hallo,

ich erzeuge über PHP Checkboxen, welche ich dort auch wieder verarbeiten will. Da man meherere anklicken kann, muß PHP diese als array erkennen, weswegen die Checkboxen einen HTML-invaliden Namen wie name='checkboxname[]' bekommen.
Da die Checkboxen nicht nur über sich selbst, sondern auch über die Tabellenzeile in der sie sich befinden klickbar sein sollen, benötige ich JavaScript.
Hier taucht dann mein Problem auf. Da die Checkboxen schon einen Namen haben der eckige Klammern enthält, kann ich sie nicht über JavaScript ansprechen, da dieses dann ein assoziatives array erwartet.

So geht es nicht:

<script language='JavaScript'>
function mark (checkbid) {
    document.formfortable.id[checkbid].checked = true;
}
</script>
</head>
<body>
<form...
<table
...
<tr class='tr_neutral' onclick="mark('0')"><td>
<input type='checkbox' name='id[0]' value='0 value'>
</td></tr>
<tr class='tr_neutral' onclick="mark('1')"><td>
<input type='checkbox' name='id[1]' value='1 value'>
</td></tr>

Das geht auch nicht:
document.formfortable.id[0].checked = true;
document.formfortable.id[0][].checked = true;

Habt Ihr eine Idee?

Vielen Dank

Sasha

  1. Moin!

    Da man meherere anklicken kann, muß PHP diese als array erkennen, weswegen die Checkboxen einen HTML-invaliden Namen wie name='checkboxname[]' bekommen.

    Der Name ist nicht HTML-invalide, der ist vollkommen normal.

    Habt Ihr eine Idee?

    Das Thema dürfte im </archiv/> schon tausende Male gelöst worden sein. Einfach mal mit dieser Suche oder mit Google suchen. Oder in SELFHTML nachsehen, wie man Formularfelder namensmäßig noch ansprechen kann. Da gibts nämlich zwei Methoden - du brauchst die zweite.

    - Sven Rautenberg

    1. Hallo Sven,

      ich habe die Suchen verwandt, habe jedoch keine brauchbare Lösung gefunden.

      Du sagst bei SelfHTML gäbe es zwei Wege, Ich habe nur den hier gesehen.
      Hatte ich versucht:
      document.forms[#].elements[#].Eigenschaft
      Hatte ich wie Du weit auch versucht:
      document.forms[0].elements[0]. ...
      (Darüber hatte ich mir den Namen des Elements geholt um es dann auf checked zu setzten...)

      Allerdings ohne Erfolg.
      Ich poste nicht, wenn ich mich nicht vorher informiert habe. Es kann natürlich sein, daß ich irgendwas übersehen habe, aber ich habe ncihts gefunden

      Grüße

      Sasha

      1. Moin!

        Ich poste nicht, wenn ich mich nicht vorher informiert habe. Es kann natürlich sein, daß ich irgendwas übersehen habe, aber ich habe ncihts gefunden

        In SELFHTML 8.1 wirst du demnächst fündig werden... :)

        In Version 8.0 steht es tatsächlich nicht explizit drin, da müßte man die Zugriffsmöglichkeiten von document.forms und allgemeines Wissen über Javascript-Objekte kombinieren und auf elements anwenden.

        - Sven Rautenberg

  2. Hallo Sasha,

    Du kannst den Checkboxen valide IDs geben in der Art 'checkboxid_0' fuer die die erste Checkbox im Array. Du uebergibst ja in diesem Fall '0' als Argument an die Funktion, sodass du die Box mit document.getElementById('checkboxid_' + checkbid) ansprechen kannst.

    Gruß,

    Dieter

    1. Hallo Sasha,

      Du kannst den Checkboxen valide IDs geben in der Art 'checkboxid_0' fuer die die erste Checkbox im Array. Du uebergibst ja in diesem Fall '0' als Argument an die Funktion, sodass du die Box mit document.getElementById('checkboxid_' + checkbid) ansprechen kannst.

      Gruß,

      Dieter

      Hallo Dieter und PHP_DUDE,

      aufgrund des PHPs und der dynamischen Erzeugung/Verarbeitung der Checkboxes, ist Euer Vorschlag genau das, was ich leider nicht machen kann.

      Trotzdem vielen Dank und Grüße

      Sasha

      1. hi,

        aufgrund des PHPs und der dynamischen Erzeugung/Verarbeitung der Checkboxes, ist Euer Vorschlag genau das, was ich leider nicht machen kann.

        was du nicht _kannst_, oder was "nicht geht"?

        wenn doch allenfalls ersteres, denn wo das problem sein soll, bei dynamischer erzeugung durch PHP auch einen zähler in der ID mitlaufen zu lassen, sehe ich nicht.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. Hallo Wahsaga,

          dank Sam läuft es jetzt.
          Aber, um es Dir zu erklären.
          Wir entwickeln an einer sehr große Software mit Frontend Interface im WWW.
          Überwiegend bin ich für das Software Design, Methodologies und Systementwicklung... zuständig, aber teilweise auch für die Frontends und das Gui-Design (Mädchen für alles oder so).
          Da es eine sehr große Anwendung ist habe ich bestimmte Vorgaben einzuhalten, diese können entweder durch Kundenwünsche entstehen, oder durch Schnittstellen, Klassen, Softwarestruktur, Programmierrichtlinien etc. nötig sein.
          Aus diesem Grund kann ich nicht einfach irgendwelche HTTP Variablen nach freiem Willen setzten, oder mich spontan für Labels etc. entscheiden, was von den Programmierrichtlinien oder anderem abweichen würde.
          Das macht die Sache im Einzelfall zwar weitaus komplizierter, ist auf lange Sicht betrachtet aber sehr sinnvoll, da es die Weiterentwicklung der Software, die Dokumentation und die Einarbeitung neuer Entwickler sehr erleichtert.

          Viele Grüße

          Sasha

          hi,

          aufgrund des PHPs und der dynamischen Erzeugung/Verarbeitung der Checkboxes, ist Euer Vorschlag genau das, was ich leider nicht machen kann.

          was du nicht _kannst_, oder was "nicht geht"?

          wenn doch allenfalls ersteres, denn wo das problem sein soll, bei dynamischer erzeugung durch PHP auch einen zähler in der ID mitlaufen zu lassen, sehe ich nicht.

          gruß,
          wahsaga

          1. hi,

            dank Sam läuft es jetzt.

            du hast also jetzt doch endlich das umgesetzt bekommen, was du auf Svens vorschlag hin erst in https://forum.selfhtml.org/?t=100715&m=617490 erst mal als nicht funktionierend hingestellt hast ...?

            dann beim nächsten mal vielleicht erst mal vorher drüber nachdenken, bevor das "geht nicht" kommt.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  3. Hallo,

    Hi,

    du könntest dem input-Feld eine id geben "id0,id1" und dann mit getElementById ansprechen oder getElementByTag.

    mfg
    PHP_Dude

  4. probiers so

    document.formfortable.elements["id[1]"].checked = true;

    gruss sam

    1. Hallo Sam,

      tausend Dank!

  5. hi,

    Da die Checkboxen nicht nur über sich selbst, sondern auch über die Tabellenzeile in der sie sich befinden klickbar sein sollen, benötige ich JavaScript.

    verbessert sowas wirklich die usability (zumal wenn es nur mit javascript "funktioniert") - oder möchtest du nicht vielleicht doch eher mal passende labels für die checkboxen einbauen?

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."