Rursus: Array durchsuchen

Hallo!

Helft mir bitte mit folgendem Problem:

Wie kann ich mittels JavaScript in einem Array nach einem bestimmten String suchen (z.B false) und daraus eine Abfrage machen. D.h.: JS soll das Array durchsuchen und falls es zumindest ein "false" findet eine Funktion aufrufen? Andernfalls wenn alle true sind eine andere Funktion aufrufen.

Mit freundlichen Grüßen

  1. hi,

    Wie kann ich mittels JavaScript in einem Array nach einem bestimmten String suchen (z.B false) und daraus eine Abfrage machen. D.h.: JS soll das Array durchsuchen und falls es zumindest ein "false" findet eine Funktion aufrufen? Andernfalls wenn alle true sind eine andere Funktion aufrufen.

    • Die indexOf-Methode nutzen in Browsern, die sie verstehen (Geckos, Opera).
    • indexOf nachbilden für Browser, die sie nicht verstehen (IE): Schleife über Array-Elemente, jedes Element vergleichen, für entsprechenden Rückgabewert sorgen. Das Array-Objekt per prototype zu erweitern, bietet sich an.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Ich habe mir das so vorgestellt:

      function checkAllBoxes(form1)
      {
       for (i = 0; i < form1.elements.length; i++)
       {
        if (form1.elements[i].type == "checkbox")
        {
        var checked = new Array();
        checked = form1.elements[i].checked;
        for (i=0; i<checked[i].length; i++)
         {
         if (checked[i] == "false"){
         alert("false");}
         else {alert("true");}
          }
        }
       }
      }

      aber irgendetwas scheint mir hier nicht koscher zu sein

      1. hi,

        for (i = 0; i < form1.elements.length; i++)

        // für alle Formularelemente

        {
          if (form1.elements[i].type == "checkbox")

        // wenn es sich um eine Checkbox handelt

        {
          var checked = new Array();

        // Erzeuge eine Variable checked als leeres Array.

        checked = form1.elements[i].checked;

        // Überschreibe den gerade eben zugewiesenen Wert wieder -
        // mit dem Inhalt der checked-Eigenschaft der aktuelle Checkbox.

        for (i=0; i<checked[i].length; i++)

        // die checked-Eigenschaft einer Checkbox hat den Wert true oder false.
        // das ist aber kein Array, und hat auch keine Eigenschaft namens length.

        gruß,
        wahsaga

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

        Ich habe mir das so vorgestellt:

        Was willst du damit bewirken? (De)Markieren aller Checkboxen?
        [Code lang=javascript]
        function checkAllBoxes(form1)
        {
         for (i = 0; i < form1.elements.length; i++)
         {
          if (form1.elements[i].type == "checkbox")
          {
           form1.elements[i].checked = true;
          }
         }
        }
        [/code]
        Sag bitte nochmal was du bewirken willst

        mfg
        Genie

        1. Also,

          ich will folgendes erreichen: Gegeben sind x checkboxen. Ich will die alle durchgehen, gucken, ob sie alle an sind und davon abhängig, ob dies true oder false ist, weitere Funktionen aufrufen.

          Gedacht habe ich mir das folgendermaßen. Ich erzeuge ein Array in das Werte von den checkboxen geschrieben werden. Dann durchsuche ich das Array nach einem Wert "false". Falls ein solcher vorhanden ist, werden dann weitere Funktionen aufgerufen.

          1. hi,

            ich will folgendes erreichen: Gegeben sind x checkboxen. Ich will die alle durchgehen, gucken, ob sie alle an sind und davon abhängig, ob dies true oder false ist, weitere Funktionen aufrufen.

            function pruefenObAlleCheckboxenAngekreuzt() {
              schleife (über alle Checkboxen) {
                wenn (aktuelleCheckbox nicht angekreuzt) {
                  return false;
                }
              return true;
            }

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Ja, danke, sowas meinte ich, aber wie mache ich dieses hier?

              wenn (aktuelleCheckbox nicht angekreuzt)

              und kann ich damit alle checkboxen durchgehen?

              for (i = 0; i < form1.elements.length; i++)

              1. hi,

                Ja, danke, sowas meinte ich, aber wie mache ich dieses hier?

                wenn (aktuelleCheckbox nicht angekreuzt)

                "wenn" kannst du dir gerne hier http://dict.leo.org/ ins Englische übersetzen lassen - und dann schauen, was davon du im Sprachumfang von Javascript wiederfindest.

                Und die Eigenschaft, die dir sagt ob eine Checkbox angekreuzt ist oder nicht - die hast du doch selbst schon erwähnt.

                und kann ich damit alle checkboxen durchgehen?

                for (i = 0; i < form1.elements.length; i++)

                Wenn du in dieser Schleife auf jedes document.form1.elements[i] zugreifen würdest, würdest du alle Formularelemente erwischen, nicht nur die vom Typ Checkbox.

                Du hattest doch vorhin bereits einen Code gepostet, der bereits alles enthielt, wonach du jetzt hier noch mal fragst ...

                gruß,
                wahsaga

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

                  
                function checkAllBoxes(form)  
                {  
                 for(var i=0; i < form.elements.length; i++)  
                 {  
                  if(form.elements[i].type = "checkbox")  
                  {  
                   if(form.elements[i].checked == false)  
                   {  
                    return false;  
                   }  
                  }  
                 }  
                 return true;  
                }  
                
                

                mfg
                Genie

      3. hallo Interessierte, gruss rursus,

        @rursus - Du willst ganz offensichtlich *eine liste*
           *aller input-type-radio-elemente* eines *bestimmten formulars*
           durchgehen und pruefen, ob fuer *jedes* dieser elemente
           die bedingung *hast'n haeckchen?* gilt.

        ich poste jetzt mal eine etwas ungewoehnlich aussehende loesung,
           die aber die oben in umgangssprache verfassten anweisungen, fast
           wortwoertlich umsetzt - erklaert wird im quellcode, betrachtungen
           folgen nach:

        ~~~javascript var isEveryCheckboxOfAppliedFormChecked = function (nodeObj) {

        return ( // gibt einen boolschen wert zurueck, da folgende bedingungen gestellt werden:
               nodeObj.nodeName && // 1) das argument muss ein [HTMLElement] knoten sein ...
               (nodeObj.nodeName.toLowerCase() == "form") && // 2) ... genauer ein [HTMLFormElement] ...
               Array.filter(nodeObj.elements, (function (elm/, idx, arr/) { // hol Dir alle elemente dieses formulars,
                 return (elm.type == "checkbox"); // .., die vom typ "checkbox" sind ... und ...
               })).every(function (elm/, idx, arr/) { // 3) pruefe, ob fuer jedes element der gefilterten liste gilt:
                 return elm.checked; // "bist Du gecheckt". (spaetestens hier wird ueber den rueckgabewert entschieden)
               })
             );

        };

          
           @all:  
           die performante verarbeitung nicht nur nativer JavaScript-arrays,  
           sondern array-artiger strukturen - \*listen\* - jeglicher art ist  
           eine der grossen staerken von JavaScript. das sprachkonzept selbst  
           haette schon immer die erweiterung des [[Array]]-konstruktors um  
           maechtige iteratoren und accessoren zugelassen, aber erst mozilla.org  
           stellte mit version 1.6 der eigenen sprach-implementierung ein  
           umfangreiches und fast alle beduerfnisse abdeckendes set dieser  
           methoden zur verfuegung.  
          
           wer sich schon mal mit LISP auseinandergesetzt hat, wird feststellen,  
           dass JavaScript jetzt aehnlich ausdrucksstark auf listen operieren kann.  
          
           fyi:  
           Douglas Crockford bezeichnete JavaScript schon 2001 als »Lisp in C's Clothing«  
          
          
           ich muss jetzt leider abbrechen und kann auch leider nicht mehr meine  
           in die runde geworfenen aussagen untermauernd verlinken ...  
          
          
           ... so long - peterS. - pseliger@gmx.net  
          
          
        
        -- 
        »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.  
        Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - [Douglas Crockford](http://javascript.crockford.com/)  
          
        ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]