Rene: IE zu langsam bei Mehrfachauswahl

Hi,
ich habe ein Feld mit ca. 200 Ankreuzfeldern (checkbox). Zu jedem dieser 200 Ankreuzfelder gehören weitere 5 Ankreuzfelder, also insgesamt 1000 Ankreuzfelder. Wenn eins der 200 Ankreuzfelder angekreuzt wird, sollen die zugehörigen 5 Ankreuzfelder auch angekreuzt werden.

Dafür habe ich folgende Javascript-Funktion ("eingabe" ist der Name des Eingabeformulares)

// nur spezielle Ankreuzfelder
function select_all_spec(source,spec){
   for(var x=0;x<document.eingabe.elements.length;x++){
      if(document.eingabe.elements[x].name==spec)
         document.eingabe.elements[x].checked = source.checked;
   }
}

Bei Klick auf eines der 200 Ankreuzfelder wird die Funktion wie folgt aufgerufen:

onclick="select_all_spec(this,'arr_id_lodging373[]');"

Der zweite Parameter (hier als Beispiel: "arr_id_lodging373[]") ist immer der Name der zugehörigen 5 Ankreuzfelder.

Soweit funktioniert auch alles wie gewünscht. Nur der IE6 braucht ewig lange (mehrere Sekunden), bis er die Markierungen der Ankreuzfelder durchführt. Im Opera, Firefox und Mozilla geht das ruckizucki.

Ist das ein IE-Bug? Kann ich die Javascript-Funktion so optimieren, dass es in allen Browser gleich schnell funktioniert? Muss ich mir was neues ausdenken?

Zur Info: Die 200 Ankreuzfelder benötige ich für eine Ausstattungsliste für Ferienwohnungen. Jedes Ankreuzfeld repräsentiert einen Ausstattungspunkt, der jeder Ferienwohnung (in diesem Beispiel 5 Ferienwohnungen) separat zugeordnet werden kann. Da aber viele Ausstattungspunkte auf alle Ferienwohnungen zutreffen, sollen die 5 Ankreuzfelder, die die 5 Ferienwohnungen repräsentieren, auch angekreuzt bzw. nicht angekreuzt werden, wenn der entsprechende Ausstattungspunkt angekreuzt oder nicht angekreuzt wird.

Danke im voraus!

  1. Hallo

    function select_all_spec(source,spec){
       for(var x=0;x<document.eingabe.elements.length;x++){
          if(document.eingabe.elements[x].name==spec)
             document.eingabe.elements[x].checked = source.checked;
       }
    }

    das geht auch einfacher mit getElementsByName.

    Gruß
    Wurf

    1. Hallo

      function select_all_spec(source,spec){
         for(var x=0;x<document.eingabe.elements.length;x++){
            if(document.eingabe.elements[x].name==spec)
               document.eingabe.elements[x].checked = source.checked;
         }
      }

      das geht auch einfacher mit getElementsByName.

      Gruß
      Wurf

      Aber natürlich

      So habe ich es jetzt geändert und es funktioniert wie gewünscht:

      function select_all_spec(source,spec){
         var len = document.getElementsByName(spec).length;
         for(var x=0;x<len;x++)
            document.getElementsByName(spec)[x].checked = source.checked;
      }

      Nochmals danke!

  2. Moin!

      
    
    > function select_all_spec(source,spec){  
    >    for(var x=0;x<document.eingabe.elements.length;x++){  
    >       if(document.eingabe.elements[x].name==spec)  
    
    /* Du gehst hier jedes im Formular enthaltene Feld durch und prüfst, ob sein Name korrekt ist.  
      
    Dabei wäre es doch wesentlich einfacher, stattdessen einfach den Namen der gesuchten Elemente in elements['Name[]'] (alternativ eben mit Variablennamen) zu verwenden - dafür ist dieses Objekt doch da!  
      
    Mehrfach existierende Elemente gleichen Namens führen dazu, dass automatisch ein Array angelegt wird: elements['mehrfachname'][0]  
      
    getElementsByName ist daher gar nicht erforderlich, die Elements-Collection in Javascript funktioniert genauso gut.  
    */  
    
    >          document.eingabe.elements[x].checked = source.checked;  
    >    }  
    > }  
    
    

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!