kostenloser Webspace werbefrei: lima-city


Checkbox soll auch false-Wert übergeben

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    kaaron

    kaaron hat kostenlosen Webspace.

    Hallo,

    ich versuche mich seit einiger Zeit an Javascript und Ajax um eine Tabelle dynamisch zu erweitern. Tabelle A enthält Einträge, die per Checkbox ausgewählt werden können. Per Ajax werden die ausgewählten Einträge in einer Tabelle B aufgeführt und 3 weitere Formularfelder erzeugt. Nach dem Posten kann ich auch die Werte als Array auslesen, allerdings ist eines der Felder eine Checkbox. Die haben die Angewohnheit nur dann ihren Wert mitzusenden, wenn sie gecheckt sind. Dadurch ist es nicht möglich, die Werte des Arrays den Werten der anderen Array zuzuordnen.
    Mir würde es reichen, wenn als Werte 'checked' und 'unchecked' oder ähnliches gepostet werden, Hauptsache sie werden immer gesendet.

    In gekürzter Form sieht das Script so aus:
    $(document).ready
    (
       function()
       {
          $(':checkBox').click
          (
             function()
             {
    	   $name = $(this).attr("name");
                   var check = $(this).is(":checked");
    	   var id = $(this).attr("id");
    	
                   if($name == "addItem")
                   {
                      var array = $(this).parent().siblings().map
                      (
                         function() 
                         {
                            return $(this).text().trim();
                         }
                      ).get();
    					
                      var table = $('#configItems');
    							
                      table.append
                      (
                         "<tr>"
                      + "<td><input type='hidden' id='ingr' name='ingrId[]' value=" + id + " required />" + array[0] + "</td>"
                      + "<td><input type='number' name='ingrAmount[]' step='0.0001' min='0.0001' class='incIngr' required /></td>"
                      + "<td> <select class='incIngr' name='ingrUnit[]' required> <option> XXX </option> </select> </td>"
    
    /* Hier muss value immer mit dem check-Zustand anstelle von id gesendet werden */
                      + "<td><input type='checkBox' id='ingr' name='opt[]' value=" + id + " /></td>"
    
                      + "</tr>"
                      );
                   }
             }
          );
       }
    }
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Und wozu?

    Wenn kein Wert gesendet wird, dann kannst du auch das mit javascript abfangen. Musst nur eine Bedingung mehr rein schreiben. Also wenn nicht gesendet, dann ist unchecked. Und das kannst du dann per Ajax an das nächste Script senden.

    So etwas musst du doch eh auffangen, gehört doch zur Fehlervermeidung. Selbst in PHP musst dies auffangen, denn ansonsten bekommst du eine Notice Meldung, dass deine Variable nicht deklariert ist.
  4. Autor dieses Themas

    kaaron

    kaaron hat kostenlosen Webspace.

    Entweder ich verstehe nicht ganz was du meinst, oder du nicht, was ich meine. Das eigentliche Problem ist ja, dass der Benutzer eine unbestimmte Menge an Zeilen mit Inputs erzeugt. Daher werden beim Posten keine einfachen Variablen gesendet, sondern Arrays. Sind in der ersten Tabelle also z.B. 5 Zeilen Markiert, sind in der 2. Tabelle ebenfalls 5 Zeilen vorhanden. Die Einträge der Spalte "Id" werden direkt übernommen. Dann muss man eine Menge und eine Einheit eingeben und kann dann per Checkbox "Optional" aktivieren.

    Nach dem Posten können die vier Arrays z.B. so aussehen:

    ingrId[] . ingrAmount[] . ingrUnit[] . opt[]
    . 2 . . . . . . 0.25 . . . . . . . 0 . . . . . .true
    . 8 . . . . . . 0.1 . . . . . . . . 0 . . . . . .true
    . 9 . . . . . . 3 . . . . . . . . . .2
    . 4 . . . . . . 0.05 . . . . . . . 0
    . 7 . . . . . . 1 . . . . . . . . . .4

    Da die Checkboxen nur dann gesendet werden, wenn sie aktiv erzeugen sie ein Array mit der Anzahl der Auswahlen (in dem Beispiel also 2). Das Problem ist nun also, dass ich nur feststellen kann, wie viele angeklickt wurden, aber nicht zu welchen Werten sie gehören. Es müsste also wie folgt aussehen:

    ingrId[] . ingrAmount[] . ingrUnit[] . opt[]
    . 2 . . . . . . 0.25 . . . . . . . 0 . . . . . .false
    . 8 . . . . . . 0.1 . . . . . . . . 0 . . . . . .true
    . 9 . . . . . . 3 . . . . . . . . . .2 . . . . . .false
    . 4 . . . . . . 0.05 . . . . . . . 0 . . . . . .false
    . 7 . . . . . . 1 . . . . . . . . . .4 . . . . . .true
  5. Autor dieses Themas

    kaaron

    kaaron hat kostenlosen Webspace.

    Hey, ja super.
    Mit ein wenig rumprobieren hat es geklappt.

    Zur Erklärung: Ich füge ein weiteres unsichtbares Feld in jede Zeile ein und setze dessen Wert auf 'unchecked'.
    Wird die Checkbox aktiviert ändert Ajax den Wert auf 'checked', wird sie deaktiviert wird der Wert wieder auf 'unchecked' gesetzt. Nach dem Posten kann ich die Felder im Array auslesen, Die Checkboxen kann ich dabei völlig ignorieren.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!