ally2: mehrere Checkboxen

Hallo Zusammen,
benötige dringend Hilfe zu folgendem Problem:

Formular mit mehreren Checkboxen aus denen ich entweder alle oder keines auswählen möchte. Soweit kein Problem. So sieht das Script bisher aus:

<script type="text/javascript">
var shall_check=true;
function check(field){
shall_check = (shall_check?false:true);
for(var a = 0;a < field.length;a++){
for (var b = 0; b < field[a].length; b++) {
field[a][b].checked = shall_check;
}
}
}
</script>
<body onload="check(Array(document.myform.list,document.myform.hallo));">
<form name="myform" action="" method="post">
<p><input type="checkbox" name="list" value="1">Java<br>
<input type="checkbox" name="list" value="2">JavaScript<br>
<input type="checkbox" name="list" value="3">CSS<br>
<input type="checkbox" name="list" value="4">HTML<br>
<input type="checkbox" name="list" value="5">DHTML<br>
<input type="checkbox" name="hallo" value="6">PHTML<br>
<input type="checkbox" name="hallo" value="7">PHP</p>
<input type="button" value=" alle " onClick="check(Array(list,hallo));">
</form>

Nun zum eigentlichen Problem. Ich möchte nun dem User zusätzlich die Möglichkeit bieten, das er bestimmte Checkboxen "von bis" aktivieren kann. Bespiel: Markiere mir CSS bis DHTML, oder Java bis CSS. Die Markierung der Checkboxen soll wie beim Copy Paste mit der Shifttaste funktionieren, oder er soll erkennen letze und erste Markierung und aktiviere mir alle dazwischenliegenden Checkboxen mit.

Für evtl. Ideen, vielen Dank im voraus.
Gruss Ally

  1. Nun zum eigentlichen Problem. Ich möchte nun dem User zusätzlich die Möglichkeit bieten, das er bestimmte Checkboxen "von bis" aktivieren kann. Bespiel: Markiere mir CSS bis DHTML, oder Java bis CSS. ...

    Was heißt von bis?

    Ohne eine programmierbare Bedingung wirst du hier kein Ergebniss erzielen. Und wie soll das ausgelösst werden? Auf Zuruf?

    Beschreibe mal exakt was du möchtest.

    Struppi.

    1. Hallo,
      Ein besseres Beispiel wäre vielleicht anhand von Uhrzeiten. Wähle Uhrzeit 08.00 bis 11.00 Uhr. Klick auf 08.00 und anschließend Klick auf 11.00 Uhr. Die Stunden 09.00 und 10.00 Uhr sollen damit mit belegt werden. Aktiviert sind dann 08.00, 09.00, 10.00 und 11.00. Anschließend wird das Formular abgeschickt und das ganze in eine DB geschrieben.
      Habe echt keine Idee dazu. Bin für Hilfe dankbar.. !!

      1. Ein besseres Beispiel wäre vielleicht anhand von Uhrzeiten. Wähle Uhrzeit 08.00 bis 11.00 Uhr.

        Was heißt "wähle", kannst du das mit igrnedeiner Interaktion die du mit deinem Browser hast in Verbindung bringen? Es gibt keine Wählscheibe, du kannst ihm nicht sagen "wähle" - ich weiß nicht was du konkret willst.

        Klick auf 08.00 und anschließend Klick auf 11.00 Uhr. Die Stunden 09.00 und 10.00 Uhr sollen damit mit belegt werden. Aktiviert sind dann 08.00, 09.00, 10.00 und 11.00.

        wieso sollte das so sein?
        soll das automatisch passieren?
        dann kannst du form.elements rückwärts durchgehen und alle checkboxen checken bis du auf eine triffst, die bereits angekreuzt wurde. Das sollte mit Hilfe von selfhtml kein Problem sein.

        Struppi.

        1. Ein besseres Beispiel wäre vielleicht anhand von Uhrzeiten. Wähle Uhrzeit 08.00 bis 11.00 Uhr.
          Was heißt "wähle", kannst du das mit igrnedeiner Interaktion die du mit deinem Browser hast in Verbindung bringen? Es gibt keine Wählscheibe, du kannst ihm nicht sagen "wähle" - ich weiß nicht was du konkret willst.

          Klick auf 08.00 und anschließend Klick auf 11.00 Uhr. Die Stunden 09.00 und 10.00 Uhr sollen damit mit belegt werden. Aktiviert sind dann 08.00, 09.00, 10.00 und 11.00.

          wieso sollte das so sein?

          Ich möchte eine Funktion haben, in der ein User sagen kann, das er in der Zeit von 08.00 bis 11.00 einen bestimmten Termin hat. Auf einem Formular soll er dann die Uhrzeit angeben können.

          soll das automatisch passieren?

          Der erste und letze Klick, sprich bin von 08.00 bis 11.00 nicht da betätigt der User, die zwischenliegenden Uhrzeiten sollen dann natürlich logischerweise auch belegt werden. Automatisch, damit er nicht in jedes Feld (08.00, 09.00, 10.00 und 11.00) einen Klick machen muss.

          dann kannst du form.elements rückwärts durchgehen und alle checkboxen checken bis du auf eine triffst, die bereits angekreuzt wurde. Das sollte mit Hilfe von selfhtml kein Problem sein.

          Habe so etwas gesucht, aber leider nix passendes gefunden, oder nicht verstanden.

          Struppi.

          1. Klick auf 08.00 und anschließend Klick auf 11.00 Uhr. Die Stunden 09.00 und 10.00 Uhr sollen damit mit belegt werden. Aktiviert sind dann 08.00, 09.00, 10.00 und 11.00.

            wieso sollte das so sein?

            Ich möchte eine Funktion haben, in der ein User sagen kann, ....

            Was heißt sagen kann?
            Bitte konkretisiere was du meinst, einem Browser kann man nichts sagen.

            dann kannst du form.elements rückwärts durchgehen und alle checkboxen checken bis du auf eine triffst, die bereits angekreuzt wurde. Das sollte mit Hilfe von selfhtml kein Problem sein.

            Habe so etwas gesucht, aber leider nix passendes gefunden, oder nicht verstanden.

            Was hast du  nicht verstanden? document.forms.elements?

            Struppi.

            1. Also, das man einem Browser nicht sagen kann, mach mal, ist mir schon klar. So weit verstehe ich die Systematik schon... Wir sind ja nicht bei Star Wars.

              Vorgabe von Uhrzeiten:
              08.00, 09.00, 10.00, 11.00, 12.00 usw.
              User gibt einen Termin ein, Datum heute, Uhrzeit 08.00 bis 11.00. Da er nun von 08.00 bis 11.00 in dem Termin sitzt und nicht um 08.00 und um 11.00, muss ich nun die Zeit dazwischen als belegt markiert bekommen. Damit der User nicht auf jede Stunde klicken muss (bin um 08.00, um 09.00, um 10.00 und um 11.00) in dem Termin, sollte das etwas komfortabler ablaufen. Er soll nun nur noch die Anfangszeit seines Termins anklicken müssen und denn Endpunkt. Für die Zeit dazwischen suche ich nun Lösung, die diese automatisch mit markiert.

              1. Also, das man einem Browser nicht sagen kann, mach mal, ist mir schon klar. So weit verstehe ich die Systematik schon... Wir sind ja nicht bei Star Wars.

                Daher bin ich auch entsprechend verwirrt über deine Fragestellung. Ich kann mich nur wiederholen, versuche zu beschreiben was der User tut (welche Tasten er drücken soll, ob es irgendwelche Formularelemente gibt die er ausfüllt, irgendwas womit man beim programmieren mit JS etwas anfangen kann) und welche Reaktionen du erwartest und in welchen Zusamenhang alles miteinander steht.

                Vorgabe von Uhrzeiten:
                08.00, 09.00, 10.00, 11.00, 12.00 usw.

                Als Checkboxen? Alle mit dem gleichen Namen?

                User gibt einen Termin ein, Datum heute, Uhrzeit 08.00 bis 11.00.

                in ein Inputfeld?

                Da er nun von 08.00 bis 11.00 in dem Termin sitzt und nicht um 08.00 und um 11.00, muss ich nun die Zeit dazwischen als belegt markiert bekommen.

                Dazu kannst du wie ich schon beschrieben habe, die entsprechenden elements durchlaufen (du hast auch meine Frage nicht beantwortet, was du da nicht verstanden hast)

                Er soll nun nur noch die Anfangszeit seines Termins anklicken müssen und denn Endpunkt. Für die Zeit dazwischen suche ich nun Lösung, die diese automatisch mit markiert.

                Das ist ja einfach, der onclick Handler ist dir bekannt?

                Struppi.

                1. Also, das man einem Browser nicht sagen kann, mach mal, ist mir schon klar. So weit verstehe ich die Systematik schon... Wir sind ja nicht bei Star Wars.

                  Daher bin ich auch entsprechend verwirrt über deine Fragestellung. Ich kann mich nur wiederholen, versuche zu beschreiben was der User tut (welche Tasten er drücken soll, ob es irgendwelche Formularelemente gibt die er ausfüllt, irgendwas womit man beim programmieren mit JS etwas anfangen kann) und welche Reaktionen du erwartest und in welchen Zusamenhang alles miteinander steht.

                  Ok, Sorry.. Ist auch etwas wirr beschrieben.. Hier im kleinen Ausschnitt, wie das Formular in etwa aussieht:

                  <html>
                    <head>
                      <title>Auswahlliste mit mehreren Optionen</title>
                    </head>
                    <body>
                   <form name="myform" action="" method="post">
                    <p>
                    <input type="text" name="textfield" value="<? $heute = date("d.m.Y"); echo $heute ?>">
                    <br>
                    <br>08.00
                    <input name="0800" type="checkbox" id="0800" value="checkbox">
                    <br>09.00
                    <input name="0900" type="checkbox" id="0900" value="checkbox">
                    <br>10.00
                    <input name="1000" type="checkbox" id="1000" value="checkbox">
                    <br>11.00
                    <input name="1100" type="checkbox" id="1100" value="checkbox">
                    <br>12.00
                    <input name="1200" type="checkbox" id="1200" value="checkbox">
                    <br>13.00
                    <input name="1300" type="checkbox" id="1300" value="checkbox">
                    <br>
                    </p>
                   </form>
                    </body>
                  </html>

                  Nun kann der User die Zeiten anklicken. Seinen Anfangstermin, also 08.00 und seinen Endtermin 11.00.. Nun fehlt mir die Lösung, wie ich die Checkboxen dazwischen als markiert dargestellt bekomme, sobald der User den Anfang- und Endzeitpunkt gesetzt hat.

                  Vorgabe von Uhrzeiten:
                  08.00, 09.00, 10.00, 11.00, 12.00 usw.

                  Als Checkboxen? Alle mit dem gleichen Namen?

                  User gibt einen Termin ein, Datum heute, Uhrzeit 08.00 bis 11.00.

                  in ein Inputfeld?

                  Da er nun von 08.00 bis 11.00 in dem Termin sitzt und nicht um 08.00 und um 11.00, muss ich nun die Zeit dazwischen als belegt markiert bekommen.

                  Dazu kannst du wie ich schon beschrieben habe, die entsprechenden elements durchlaufen (du hast auch meine Frage nicht beantwortet, was du da nicht verstanden hast)

                  Er soll nun nur noch die Anfangszeit seines Termins anklicken müssen und denn Endpunkt. Für die Zeit dazwischen suche ich nun Lösung, die diese automatisch mit markiert.

                  Das ist ja einfach, der onclick Handler ist dir bekannt?

                  Leider nicht wirklich.. Nicht so, das ich wüßte wie ich es hinbekomme.

                  Struppi.

  2. hi,

    Ich möchte nun dem User zusätzlich die Möglichkeit bieten, das er bestimmte Checkboxen "von bis" aktivieren kann. Bespiel: Markiere mir CSS bis DHTML, oder Java bis CSS. Die Markierung der Checkboxen soll wie beim Copy Paste mit der Shifttaste funktionieren

    Dann frage im onclick-Event ab, ob gleichzeitig die Shift-Taste gedrückt wurde.

    Merke dir, dass (bzw. ob) das zum ersten Mal passiert (aktuelle Checkbox als "von" merken), oder zum zweiten (aktuelle Box als "bis" nehmen, und in Schleife die dazwischen liegenden ebenfalls markieren).

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo ally2.

    Ich möchte nun dem User zusätzlich die Möglichkeit bieten, das er bestimmte Checkboxen "von bis" aktivieren kann.

    Was spricht eigentlich gegen ein <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_mehrfach@title=mehrzeiliges Auswahlfeld>? Das gewünschte Verhalten ist hier standardmäßig gegeben.

    Einen schönen Montag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. hi,

      Was spricht eigentlich gegen ein <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_mehrfach@title=mehrzeiliges Auswahlfeld>? Das gewünschte Verhalten ist hier standardmäßig gegeben.

      Wo?

      Das hier geforderte Verhalten, dass bei Auswahl zweier entfernt liegender "Punkte" auch alle dazwischen liegenden automatisch an-/ausgewählt werden, bietet ein select multiple nicht "standardmäßig".

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo wahsaga.

        Was spricht eigentlich gegen ein <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_mehrfach@title=mehrzeiliges Auswahlfeld>? Das gewünschte Verhalten ist hier standardmäßig gegeben.

        Das hier geforderte Verhalten, dass bei Auswahl zweier entfernt liegender "Punkte" auch alle dazwischen liegenden automatisch an-/ausgewählt werden, bietet ein select multiple nicht "standardmäßig".

        Unter Nutzung der Shift-Taste schon.

        Einen schönen Montag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
        1. hi,

          Unter Nutzung der Shift-Taste schon.

          Stimmt, du hast recht. (Ich merke mal wieder, wie selten ich diese Dinger doch benutze).

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Hallo ally2.

      Ich möchte nun dem User zusätzlich die Möglichkeit bieten, das er bestimmte Checkboxen "von bis" aktivieren kann.

      Was spricht eigentlich gegen ein <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_mehrfach@title=mehrzeiliges Auswahlfeld>? Das gewünschte Verhalten ist hier standardmäßig gegeben.

      Einen schönen Montag noch.

      Gruß, Mathias

      Hallo Mathias,
      auch eine prima Idee. Würde mir helfen, nur fehlt mir dazu das Wissen, wie ich genau die ausgewählten Felder z.B. in eine Datenbank schreibe. In dem vorliegenden Beispiel, würde ich nun Heino bis Tom Waits mittels der Shift-Taste markieren (Heino, Michael Jackson und Tom Waits sind somit bereit um nun in die vorgesehenen Felder der DB geschrieben zu werden). Nur wie??
      Schönen Grüß
       Ally

      1. Hallo ally2.

        Hallo ally2.

        Bitte zitiere sinnvoll, danke.

        Ich möchte nun dem User zusätzlich die Möglichkeit bieten, das er bestimmte Checkboxen "von bis" aktivieren kann.

        Was spricht eigentlich gegen ein <http://de.selfhtml.org/html/formulare/auswahl.htm#listen_mehrfach@title=mehrzeiliges Auswahlfeld>? Das gewünschte Verhalten ist hier standardmäßig gegeben.

        auch eine prima Idee. Würde mir helfen, nur fehlt mir dazu das Wissen, wie ich genau die ausgewählten Felder z.B. in eine Datenbank schreibe.

        Ändere den Namen des select-Elementes von beispielsweise „foo“ auf „foo[]“. Dann erzeugt PHP automatisch ein Array aus den gewählten Einträgen.

        Einen schönen Montag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
        1. Ändere den Namen des select-Elementes von beispielsweise „foo“ auf „foo[]“. Dann erzeugt PHP automatisch ein Array aus den gewählten Einträgen.

          Hallo Mathias,
          ich habe Deine Anregung von gestern aufgenommen und ein Script erstellt. Läuft soweit ganz gut.

          Hier ein Auszug.

          <form method="post" name="anlage" id="anlage">
          Gew&uuml;nschte Uhrzeit
          <select name="zeit[]" size="4" multiple="multiple">
            <option value="08.00">08.00</option>
            <option value="09.00">09.00</option>
            <option value="10.00">10.00</option>
            <option value="11.00">11.00</option>
          </select><br />
          <input type="submit" name="Submit" value="Bestellung aufgeben" />
          <p>
          <?php
            $zeit = (isset($_POST["zeit"])) ? $_POST["zeit"] : array("");

          $zeit = htmlspecialchars(implode(" ", $zeit));

          echo "<input type='text' name='z800' value='$zeit' >";
          ?>

          Er setzt mir nun die ausgewählten Zeiten komplett hintereinander in das Feld "z800".
          Gibt es nun auch noch eine Möglichkeit zu sagen, die ausgewählten Zeiten in entsprechende Felder zu setzen? Bsp: 08.00 soll in ein Feld 08.00, 09.00 ins Feld 09.00 usw.. Die Zeiten hintereinander als Array nützen mir leider nicht viel, ich hätte gerne jede Uhrzeit für sich in ein extra dafür vorgesehenes Feld.

          Vielen Dank im voraus
          Gruß
           Ally