Alex: Dyn. Checkbox

Hallo,

habe folgenden Code erstellt:

  
var anz = 10;  
for(var i=1; i<=anz; i++)  
{  
  var c = document.createElement('input');  
  c.type = 'checkbox';  
  c.id = 'ck_' + i;  
  
  var t = document.createTextNode('Check ' + i);  
  var s = document.createElement('span');  
  
  s.onclick = function(){ ckb(c) };  
  
  s.appendChild(t);  
  document.getElementById('div');  
}  
  
function ckb(ck)  
{  
  ck.checked = !ck.checked;  
}  

Kurz erklärt: es soll beim Klick auf den Text jeweils der dazugehörige Checkbox aktiviert/deaktiviert werden.

Problem ist, dass immer nur der letzte Checkbox hier angesteuert wird, egal welchen Text ich anklicke. Ist das normal? Wie muss ich das sonst machen?

Vielen Dank!

Alex

  1. hi,

    Kurz erklärt: es soll beim Klick auf den Text jeweils der dazugehörige Checkbox aktiviert/deaktiviert werden.

    Wozu Javascript?
    Label existieren.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wozu Javascript?
      Label existieren.

      eine lange Geschichte...

  2. Problem ist, dass immer nur der letzte Checkbox hier angesteuert wird, egal welchen Text ich anklicke. Ist das normal? Wie muss ich das sonst machen?

    Das Problem ist das in deinem closure die Variabel c immer den Inhalt des letzten Inputelement hat.

    Die einfachste Lösung ist, dem Element das den klick ausführt den gewünschtne Wert als Eigenschaft mitgeben.

    s.c = c;  
    s.onclick = function(){ ckb(this.c) };  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Das Problem ist das in deinem closure die Variabel c immer den Inhalt des letzten Inputelement hat.

      ist das nicht egal? Es sind doch 10 CheckBoxen und 10 TextNode. Alle 10 TextNode's greifen hier nur auf den letzten CheckBox!? Eine Referenz im Spiel? Wie kann ich das umgehen?

      Die einfachste Lösung ist, dem Element das den klick ausführt den gewünschtne Wert als Eigenschaft mitgeben.

      s.c = c;

      s.onclick = function(){ ckb(this.c) };

      Geht nicht :(
      
      1. hi,

        Das Problem ist das in deinem closure die Variabel c immer den Inhalt des letzten Inputelement hat.
        ist das nicht egal?

        Was soll die blöde Frage?
        Du hast doch gemerkt, dass es nicht egal ist.

        Es sind doch 10 CheckBoxen und 10 TextNode. Alle 10 TextNode's greifen hier nur auf den letzten CheckBox!? Eine Referenz im Spiel?

        Nein, ein Closure - das Stichwort nannte Struppi bereits.

        Wie kann ich das umgehen?

        Auch einen Alternativvorschlag machte Struppi bereits.

        gruß,
        wahsaga

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

          Das Problem ist das in deinem closure die Variabel c immer den Inhalt des letzten Inputelement hat.
          ist das nicht egal?

          Was soll die blöde Frage?
          Du hast doch gemerkt, dass es nicht egal ist.

          Es sind doch 10 CheckBoxen und 10 TextNode. Alle 10 TextNode's greifen hier nur auf den letzten CheckBox!? Eine Referenz im Spiel?

          Nein, ein Closure - das Stichwort nannte Struppi bereits.

          Wie kann ich das umgehen?

          Auch einen Alternativvorschlag machte Struppi bereits.

          gruß,
          wahsaga

          Blödes HTML :( Ich mag es nicht leiden.

          @wahsaga
          warum denn nicht gleich so? Muß man immer zuerst auf die Nase fallen?

          Danke!

          1. hi,

            bitte zitiere vernünftig,

            warum denn nicht gleich so?

            Warum nicht gleich _was_ _wie_?

            Muß man immer zuerst auf die Nase fallen?

            Ich muss nicht.
            Ob du musst, weiss ich nicht.

            gruß,
            wahsaga

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

              bitte zitiere vernünftig,

              das war keine Zitat. Ich habe dich gemeint (@wahsaga) also mit @

              warum denn nicht gleich so?

              Warum nicht gleich _was_ _wie_?

              muss man die Hilfestellung sich erst erkaufen/erbetteln? Warum schreibst du nicht gleich, was man falsch macht und wie es gemacht werden soll? Das hier:
              »»Wozu Javascript?
              »»Label existieren.
              hilft mir nicht wirklich weiter... Wenn, dann sollte man diese "kurz und knapp" lieber gleicht sein lassen, oder?

              Muß man immer zuerst auf die Nase fallen?

              Ich muss nicht.
              Ob du musst, weiss ich nicht.

              Muß ich nicht :). Manche Leute lassen einen auf die Nase fallen...

              1. hi,

                bitte zitiere vernünftig,
                das war keine Zitat. Ich habe dich gemeint (@wahsaga) also mit @

                Abgesehen davon, dass wir uns hier in einem Forum und nicht in einem Board befinden, @-Ansprachen hier also unnötig sind, wenn man auf die richtigen Postings antwortet - bezog ich mich auf dein sinnloses Fullquote.

                muss man die Hilfestellung sich erst erkaufen/erbetteln?

                IdR. nicht, aber -

                Warum schreibst du nicht gleich, was man falsch macht und wie es gemacht werden soll? Das hier:
                »»Wozu Javascript?
                »»Label existieren.
                hilft mir nicht wirklich weiter...

                Ich kann doch im Voraus nicht wissen, dass du _so_ wenig Ahnung von HTML hast, dass dir Label für Formularelemente nicht bekannt sind.

                Dass dir ihre Existenz kurzzeitig entfallen sein könnte, habe ich noch in betracht gezogen - und dich deshalb noch mal auf diese hingewiesen, inklusive Verlinkung.

                Wenn, dann sollte man diese "kurz und knapp" lieber gleicht sein lassen, oder?

                Die verlinkte Seite erklärt recht detailiert, was man mit Labels erreichen kann - wenn du dir das aufmerksam durchgelesen hättest, hättest du m.E. erkennen sollen, dass diese dein Problem bereits lösen könnten, ohne das du per Javascript auf irgendwelche Events reagieren musst.

                Wenn du aber nicht mal bereit bist, dir einen hilfreichen Link, der dir präsentiert wird, halbwegs aufmerksam durchzuarbeiten - dann stimme ich dir bezüglich des lieber-gleich-bleiben-Lassens natürlich zu: Dann lass' es halt sein.

                Und irgendwelche Hinweise auf "lange Geschichten", die sich letztendlich als völliger Unfug herausstellen dürften, kannst du dir auch sparen.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Ich kann doch im Voraus nicht wissen, dass du _so_ wenig Ahnung von HTML hast, dass dir Label für Formularelemente nicht bekannt sind.

                  das sieht man doch, wenn ich Labels kennen würde, würde ich nicht auf JS zurückgreifen. Ich sitze schon 3 Stunden an diesen Blödsinn. Und ich muß arbeiten, also Vorankommen. Ich werde dafür bezahlt und das nicht wenig. Meinst du ich mache es aus Spass?

                  Dass dir ihre Existenz kurzzeitig entfallen sein könnte, habe ich noch in betracht gezogen - und dich deshalb noch mal auf diese hingewiesen, inklusive Verlinkung.

                  Wenn, dann sollte man diese "kurz und knapp" lieber gleicht sein lassen, oder?

                  Die verlinkte Seite erklärt recht detailiert, was man mit Labels erreichen kann - wenn du dir das aufmerksam durchgelesen hättest, hättest du m.E. erkennen sollen, dass diese dein Problem bereits lösen könnten, ohne das du per Javascript auf irgendwelche Events reagieren musst.

                  Wenn du aber nicht mal bereit bist, dir einen hilfreichen Link, der dir präsentiert wird, halbwegs aufmerksam durchzuarbeiten - dann stimme ich dir bezüglich des lieber-gleich-bleiben-Lassens natürlich zu: Dann lass' es halt sein.

                  Wenn ich nicht weiß, was Labels sind und nur eine knappe Antwort aus 4 Wörtern kriege, komme ich mir verar...t vor. Meinst du ich lese mir dann die Anleitung über Labels durch. Außerden wie gesagt, ich habe keine Zeit für jegliche Lektüren. Ich muß vorankommen. Darüber hinaus ist HTML nicht mein Job. Ich muß nur eine einzige Vorlage erstellen und gut is... Danach brauche ich das nicht mehr.

                  1. hi,

                    Ich kann doch im Voraus nicht wissen, dass du _so_ wenig Ahnung von HTML hast, dass dir Label für Formularelemente nicht bekannt sind.
                    das sieht man doch, wenn ich Labels kennen würde, würde ich nicht auf JS zurückgreifen.

                    Mit Javascript spielen die Leute aus den verschiedensten Beweggründen herum - und nicht immer aus sinnvollen.

                    Ich sitze schon 3 Stunden an diesen Blödsinn. Und ich muß arbeiten, also Vorankommen. Ich werde dafür bezahlt und das nicht wenig.

                    Du wirst für etwas bezahlt, von dem du so wenig Ahnung hast?
                    Meinen Glückwunsch.

                    Allerding solltest du dich dann m.E. an kostenpflichtigen Support wenden, wenn du damit nicht zurechtkommst, und auch nicht bereit bist, dir mal eben eine Erklärung durchzulesen.

                    Wenn ich nicht weiß, was Labels sind und nur eine knappe Antwort aus 4 Wörtern kriege, komme ich mir verar...t vor.

                    Und ich mir, wenn ich dir hier als Antwort einen erklärenden Link poste -

                    Meinst du ich lese mir dann die Anleitung über Labels durch.

                    • und du fauler S*** dann noch nicht mal bereit bist, dir das kurz durchzulesen.

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                    1. Ich sitze schon 3 Stunden an diesen Blödsinn. Und ich muß arbeiten, also Vorankommen. Ich werde dafür bezahlt und das nicht wenig.

                      Du wirst für etwas bezahlt, von dem du so wenig Ahnung hast?
                      Meinen Glückwunsch.

                      Wer lesen kann - ist klar im Vorteil. Ich werde bezahlt, eben für was Anderes und nicht für dieses Sch... HTML/JS

                      Allerding solltest du dich dann m.E. an kostenpflichtigen Support wenden, wenn du damit nicht zurechtkommst, und auch nicht bereit bist, dir mal eben eine Erklärung durchzulesen.

                      Welche Erklärung? Hast du die selber gelesen? Da sitze ich noch 3 Stunden dran, bis ich alles durchgelesen habe. Weniger ist oft mehr...

                      Wenn ich nicht weiß, was Labels sind und nur eine knappe Antwort aus 4 Wörtern kriege, komme ich mir verar...t vor.

                      Und ich mir, wenn ich dir hier als Antwort einen erklärenden Link poste -

                      Meinst du ich lese mir dann die Anleitung über Labels durch.

                      • und du fauler S*** dann noch nicht mal bereit bist, dir das kurz durchzulesen.

                      Es ist gut jetzt. Ich habe keinen Bock auf diese Diskussion. Wenn du Zeit dafür hast hier eine Sinnlose Diskussion zu führen, freue ich mich für dich. Du hast ja vielleicht Langeweile, anstatt vernünftig zu helfen. Meine Güte

                      1. hi,

                        Welche Erklärung? Hast du die selber gelesen? Da sitze ich noch 3 Stunden dran, bis ich alles durchgelesen habe.

                        Wenn du so langsam liest, ist das nicht mein Problem.

                        Weniger ist oft mehr...

                        So wenig, wie du bereit bist, selber zu leisten - ist das in meinen Augen Schnorrerei.

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
                  2. Ich werde dafür bezahlt und das nicht wenig.

                    Schön, wohin darf ich meine Rechnung für https://forum.selfhtml.org/?t=151274&m=983771 schicken?

                    Siechfred

                    --
                    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
      2. Die einfachste Lösung ist, dem Element das den klick ausführt den gewünschtne Wert als Eigenschaft mitgeben.

        s.c = c;

        s.onclick = function(){ ckb(this.c) };

        
        > Geht nicht :(  
          
        geht wohl.  
          
        Struppi.
        
        -- 
        [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
        
        1. Die einfachste Lösung ist, dem Element das den klick ausführt den gewünschtne Wert als Eigenschaft mitgeben.

          s.c = c;

          s.onclick = function(){ ckb(this.c) };

          
          > > Geht nicht :(  
          >   
          > geht wohl.  
          
          Beim Anklicken: 'undefined' ist Null oder kein Objekt.  
            
          Was ist 'undefined'?  
            
          Alex
          
          1. geht wohl.
            Beim Anklicken: 'undefined' ist Null oder kein Objekt.

            Was ist 'undefined'?

            Keine Ahnung, irgendwas machst du falsch nur was?

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. geht wohl.
              Beim Anklicken: 'undefined' ist Null oder kein Objekt.

              Was ist 'undefined'?

              Keine Ahnung, irgendwas machst du falsch nur was?

              Das wüsste ich auch gern :) Mache gerade mein Lernkurs mit HTML u. JS nach dem Motto: Learning by Doing.

              Beim Ankliken auf ein Button werden im div-Abschnitt 10 "dieser" Checkboxen. Was kann man hier falsch machen?

              Alex

              1. Keine Ahnung, irgendwas machst du falsch nur was?
                Das wüsste ich auch gern :) Mache gerade mein Lernkurs mit HTML u. JS nach dem Motto: Learning by Doing.

                Beim Ankliken auf ein Button werden im div-Abschnitt 10 "dieser" Checkboxen. Was kann man hier falsch machen?

                Eigentlich nichts.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
  3. Kurz erklärt: es soll beim Klick auf den Text jeweils der dazugehörige Checkbox aktiviert/deaktiviert werden.

    Hänge mit Hilfe der geeigneten DOM-Methoden statt des span- ein label-Element ein.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Kurz erklärt: es soll beim Klick auf den Text jeweils der dazugehörige Checkbox aktiviert/deaktiviert werden.

      Hänge mit Hilfe der geeigneten DOM-Methoden statt des span- ein label-Element ein.

      Warum nicht span?

      1. hi,

        Hänge mit Hilfe der geeigneten DOM-Methoden statt des span- ein label-Element ein.
        Warum nicht span?

        Weil du mit Label gar kein Javascript mehr bräuchtest, um per Klick auf den Text den Zustand der Checkbox zu ändern.
        Aber einfach machen willst du es dir ja wegen irgendeiner ominösen langen Geschichte offenbar nicht ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hänge mit Hilfe der geeigneten DOM-Methoden statt des span- ein label-Element ein.
        Warum nicht span?

        Siehe wahsaga. Ansonsten hier ein kleiner Denkanstoß:

        var parentElem = document.getElementById('elternelement');  
        var anz = 10;  
        for(var i=1; i<=anz; i++) {  
          var myLabel = document.createElement('label');  
          myLabel.[link:http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#label@title=htmlFor] = 'ck_' + i;  
          var labeltext = document.createTextNode('Check ' + i);  
          myLabel.appendChild(labeltext);  
          parentElem.appendChild(myLabel);  
          var myCheckbox = document.createElement('input');  
          myCheckbox.type = 'checkbox';  
          myCeckbox.id = 'ck_' + i;  
          parentElem.appendChild(myCheckbox);  
        }
        

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
        1. Siehe wahsaga. Ansonsten hier ein kleiner Denkanstoß:

          var parentElem = document.getElementById('elternelement');

          var anz = 10;
          for(var i=1; i<=anz; i++) {
            var myLabel = document.createElement('label');
            myLabel.[link:http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#label@title=htmlFor] = 'ck_' + i;
            var labeltext = document.createTextNode('Check ' + i);
            myLabel.appendChild(labeltext);
            parentElem.appendChild(myLabel);
            var myCheckbox = document.createElement('input');
            myCheckbox.type = 'checkbox';
            myCeckbox.id = 'ck_' + i;
            parentElem.appendChild(myCheckbox);
          }

          
          >   
          > Siechfred  
            
          Vielen Dank! Das nennt man Hilfe ;) Ich schulde dir was...  
            
          Alex