Thomas Müller: Checkboxen checked vor Absenden überprüfen

Hallo,

ich arbeite zur Zeit an einem Tool, mit dem mehrere Werte einer MySQL-Tabelle gleichzeitig geändert werden können. Ich möchte allerdings, bevor ein Formular abgeschickt wird überprüfen, ob mindestens eine Checkbox aktiviert ist, ansonsten das Absenden abbrechen. Die Checkboxen sind als array deklariert: name="edit[]".

Hier der entsprechende Ausschnitt aus dem Sourcecode:

function buttons() {";
  res=false;
  for(x=0; x<document.form.edit.length; x++) {
    if(document.form.edit[x].checked==true) {
      res=true;
    }
  }
  return res;
}

Das Formular wird wie folgt deklariert:
<form name="form" method="post" onSubmit="return buttons()">

Ich hoffe, dass mir geholfen werden kann. ;)

MfG

  1. Hi !

    Jede Checkbox hat das Attribut "selectedIndex", das den Index des ausgewaehlten Elements ausgibt. -1 = nichts ausgewaehlt, 0 =erstes Element, etc.

    Probier's damit mal !

    Gruß

    Hans

    1. Ich hoffe ich habe dich richtig verstanden, ich habe die Funktion jetzt so verändert:

      function buttons() {
       res=false;
       if(document.form.edit[].selectedIndex!=-1) {
        res=true;
       }
      return res;
      }

      Leider hat das aber immernoch nicht die erwünschte Wirkung.

      1. Hallo Thomas Müller,

        if(document.form.edit[selectedIndex]!=-1) {

        Mit freundlichem Gruß
        Micha

        --
        LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
  2. Hi,

    Ich möchte allerdings, bevor ein Formular abgeschickt wird überprüfen, ob mindestens eine Checkbox aktiviert ist, ansonsten das Absenden abbrechen. Die Checkboxen sind als array deklariert: name="edit[]".

    nöö - nicht in Javacript. Dort besitzen sie einfach alle den Namen "edit[]" - es sind ja keine radios.
    ich wuerde zunächst den index beim Erzeugen mit hineinschreiben...
     "edit[0]"
     "edit[1]"
     usw.
    ...mir die Max-Anzahl merken und dann so pruefen...
    for (var i = 0; i < max; i++) {
        if (document.form.elements["edit[" + i + "]"].checked) tu_was();
    }

    Du prüfst also lediglich einen _string_ der zufällig "[" und "]" enthaelt...

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hi,

      Ich möchte allerdings, bevor ein Formular abgeschickt wird überprüfen, ob mindestens eine Checkbox aktiviert ist, ansonsten das Absenden abbrechen. Die Checkboxen sind als array deklariert: name="edit[]".
      nöö - nicht in Javacript. Dort besitzen sie einfach alle den Namen "edit[]" - es sind ja keine radios.
      ich wuerde zunächst den index beim Erzeugen mit hineinschreiben...
      "edit[0]"
      "edit[1]"
      usw.
      ...mir die Max-Anzahl merken und dann so pruefen...
      for (var i = 0; i < max; i++) {
          if (document.form.elements["edit[" + i + "]"].checked) tu_was();
      }

      Du prüfst also lediglich einen _string_ der zufällig "[" und "]" enthaelt...

      Gruesse, Joachim

      Die Anzahl der Checkboxen ist abhängig von der Anzahl der Einträge, die aus der MySQL-Tabelle ausgelesen werden. Ich weiß also vorher nicht, wieviele Checkboxen ich haben werde. Ich könnte das theoretisch mit php mitzählen, aber php-variablen funktionieren in php nicht.

      1. Hi,

        Die Anzahl der Checkboxen ist abhängig von der Anzahl der Einträge, die aus der MySQL-Tabelle ausgelesen werden. Ich weiß also vorher nicht, wieviele Checkboxen ich haben werde. Ich könnte das theoretisch mit php mitzählen, aber php-variablen funktionieren in php nicht.

        Das ist ja nun kompletter Blödsinn. Wenn Du mit php Daten aus MySql holst weisst Du natürlich, wieviel Datensätze zurückgekommen sind. Entsprechend setzt Du die Max-Variable in Javascript. Abgesehen davon: wer Php nutzt sollte _serverseitig_ validieren.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
        1. Nur um dir das mal zu zeigen:

          $data=mysql_query('SELECT * FROM '.$table) or die(mysql_error());

          while($output=mysql_fetch_assoc($data)) {
               echo "<tr>";
                echo "<td width="25%">";
                 echo $output["name"];
                echo "</td>";

          echo "<td width="10%">";
                 $x=$output["typ"];
                 echo $types[$x];
                echo "</td>";

          echo "<td width="5%" align="right">";
                 echo $output["status"];
                echo "</td>";

          echo "<td width="25%">";
                 echo "<a href="".$output["link"]."" target="_blank">".$output["link"]."</a>";
                echo "</td>";

          echo "<td width="30%" align="center">";
                 echo "<a href="?action=edit&edit[]=".$output["id"]."">Bearbeiten</a> &#8226; ";
                 echo "<a href="?action=confirm&edit[]=".$output["id"]."">Freischalten</a> &#8226; ";
                 echo "<a href="?action=delete&edit[]=".$output["id"]."">L&ouml;schen</a>";
                echo "</td>";

          echo "<td width="5%" align="center">";
                 if($checkall==1) echo "<input type="checkbox" name="edit[]" value="".$output["id"]."" checked>";
                 else echo "<input type="checkbox" name="edit[]" value="".$output["id"]."">";
                echo "</td>";
               echo "</tr>";
              }

          Und jetzt sag mir mal, wie ich da wissen soll, wieviele checkboxen ich habe!

          1. Hi,

            Und jetzt sag mir mal, wie ich da wissen soll, wieviele checkboxen ich habe!

            Du könntest Dir das selber sagen wenn Du beizeiten die Doku lesen würdest: http://de2.php.net/manual/de/function.mysql-num-rows.php

            Gruesse, Joachim

            --
            Am Ende wird alles gut.