Zugriff auf Daten in LISTBOX unter FF3 umständlich (gelöst)

  • Bei mir funktioniert der Datenzugriff nur auf jene Datensätze, die zuvor schon in der LISTBOX angezeigt wurden. Unter FF2 kann ich auf alle Einträge problemlos zugreifen.

    Festlegen, wie viele Zeilen auf einmal angezeigt werden:

    Code
    LISTBOX.setAttribute("rows", 10);


    Einen Datensatz hinzufügen

    Code
    var listitem = document.createElement("listitem");
    listitem.setAttribute("label","Hier steht der Inhalt");
    listitem.setAttribute("type", "checkbox");
    listitem.setAttribute("checked", true);
    LISTBOX.appendChild(listitem);


    Und hier der Teil, mit dem der Haken in den Checkboxen gesetzt oder entfernt werden kann

    Code
    for ( var i = 0; i < LISTBOX.getRowCount(); i++ )
    {
    	LISTBOX.getItemAtIndex(i).checked = false;
    }

    Für FF3 muss ich die obige Schleife anpassen, damit es funktioniert:

    Code
    for ( var i = 0; i < LISTBOX.getRowCount(); i++ )
    {
    	LISTBOX.ensureIndexIsVisible(i);
    	LISTBOX.getItemAtIndex(i).checked = false;
    }


    Gibt es keinen Weg, auf die Daten zuzugreifen ohne das Behelfskonstrukt mit ensureIndexIsVisible(index)?

    Einmal editiert, zuletzt von haselnuss (30. August 2008 um 13:22)

  • Okay, "umständlich" ist wohl das falsche Wort. Diese Vorgehensweise ist zu vergleichen mit der tausendfachen Aktualisierung der value-Eigenschaft einer textbox, um tausend Zeilen einzufügen. Läuft dann wohl unter "von hinten durch die Brust ins Auge".

    Etwas erweitert sieht die obige Variante dann so auf. Die zusätzlichen Befehle stellen sicher, dass der Benutzer nach Beendigung der Schleife dort weitermachen kann, wo er sich zuvor befand.

    Code
    var aktPos = LISTBOX.getIndexOfFirstVisibleRow();
    for ( var i = 0; i < LISTBOX.getRowCount(); i++ )
    {
       LISTBOX.ensureIndexIsVisible(i);
       LISTBOX.getItemAtIndex(i).checked = false;
    }
    LISTBOX.scrollToIndex(aktPos);

    Und hier die bislang beste Variante, die sowohl unter FF2 als auch unter FF3 funktioniert.

    Code
    for ( var i = 0; i < LISTBOX.getRowCount(); i++ )
    {
       LISTBOX.childNodes[i].setAttribute("checked", false);
    }

    Problem gelöst!