Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Checkbox rekursiv anhaken

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Checkbox rekursiv anhaken

    Hallo miteinander!

    Ich habe n'Problem was Checkboxen und Javascript angeht.
    Ich habe eine Hauptkategorie, verschiedene Unterkategorien dann nochmal verschiedene Unterkategorien der Unterkategorie.
    Sieht etwa so aus:
    -Hauptkategorie NAME=905 ID=990
    ---Unterkategorie NAME=990 ID=991
    ------Unter-Unterkategorie NAME=991 ID=992
    ------Unter-Unterkategorie NAME=991 ID=993
    ------Unter-Unterkategorie NAME=991 ID=994
    ------Unter-Unterkategorie NAME=991 ID=995
    ---Unterkategorie NAME=990 ID=996
    ---Unterkategorie NAME=990 ID=997
    -Hauptkategorie NAME=905 ID=998
    ---Unterkategorie NAME=998 ID=999
    ---Unterkategorie NAME=998 ID=1000
    ------Unter-Unterkategorie NAME=1000 ID=1001
    ------Unter-Unterkategorie NAME=1000 ID=1002
    ------Unter-Unterkategorie NAME=1000 ID=1003

    Wenn ich eine Kategorie auswähle, möchte ich, dass alle darunterliegenden (egal wieviele Ebenen) Kategorien auch angehackt werden.
    Kann mir hier irgendjemand helfen?

    Aktuell funktioniert es so, dass wenn ich die Hauptkategorie auswähle alle Unterkategorien (leider ohne "Unter-Unterkategorie") ausgewählt werden...
    Diese JS-Funktionen benutze ich dafür: (im onClick-Event wird "checkPages" aufgerufen mit der aktuellen ID als Parameter)
    Code:
    function checkPages(checkId)
    {
      var field = document.getElementById(checkId); 
      if(field.checked == true)
        checkAllPages(checkId); 
      else
        uncheckAllPages(checkId); 
    }
    
    
    function uncheckAllPages(checkId)
    {
      var fields = document.getElementsByName(checkId); 
      if(fields.length > 0)
        for(var i = 0; i <= fields.length; i++)
          if(fields[i] != undefined)
            fields[i].checked = false;
    }
    
    
    function checkAllPages(checkId)
    {
      var fields = document.getElementsByName(checkId);  
      if(fields.length > 0)
        for(var i = 0; i <= fields.length; i++)
          if(fields[i] != undefined)
            fields[i].checked = true; 
    }
    greetz
    seitz

  • #2
    SELFHTML: JavaScript / Objektreferenz / document liest das imho rekursiv aus. Einfach Mal auf dein Übergeordnetes Element anwenden, nach den input mit dem entsprechenden type suchen und reagieren.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      ich habs soeben (bevor ich die antwort gelesen habe) rausbekommen... eig. gar nicht schwer...
      naja, hier der funktionierende code:
      Code:
      function checkPages(checkId)
      {
        var field = document.getElementById(checkId); 
        if(field.checked == true)
          checkAllPages(checkId); 
        else
          uncheckAllPages(checkId); 
      }
      
      
      function uncheckAllPages(checkId)
      {
        var fields = document.getElementsByName(checkId); 
        if(fields.length > 0)
          for(var i = 0; i <= fields.length; i++)
            if(fields[i] != undefined)
            {
              fields[i].checked = false;
              uncheckAllPages(fields[i].getAttribute('id')); 
            }
      }
      
      
      function checkAllPages(checkId)
      {
        var fields = document.getElementsByName(checkId);  
        if(fields.length > 0)
          for(var i = 0; i <= fields.length; i++)
            if(fields[i] != undefined)
            {
              fields[i].checked = true;
              checkAllPages(fields[i].getAttribute('id'));
            } 
      }
      Ich habe innerhalb der jeweiligen Funktion dieselbe Funktion nochmal augerufen und siehe da -> funktioniert!
      greetz
      seitz

      Kommentar


      • #4
        Zitat von seitz Beitrag anzeigen
        Ich habe innerhalb der jeweiligen Funktion dieselbe Funktion nochmal augerufen und siehe da -> funktioniert!
        was ja auch Sinn einer Rekursion ist
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar

        Lädt...
        X