Sehr spezielles Problem mit Prototype / IE6

penntuete

Mitglied
Hallo,

tut mir leid das ich im Titel so magere Angaben gemacht habe aber das Problem ist nicht mit einer Zeile beschrieben.

Ich habe ein etwas größeres Java Script welches wir ein paar Selectboxen dynamisch befüllt (dom:loaded Event). Das funktioniert soweit alles wunderbar. Auch im IE!

Am Ende vom Script möchte ich jedoch noch die Selectboxen vorselektieren. Den zu selektierenden Index bestimme ich mittels einer Java Script Methode. Dann wird der Wert wie folgt gesetzt:
Code:
$(addressSelectBoxId).selectedIndex = selAddressIndex;

Das klappt im Firefox prima jedoch im IE nur, wenn ich vor der Methode die vorselektieren soll eine alert() Ausgabe setze oder - jetzt kommts - diese Methode mit einem 0ms Timeout aufrufe. Das Timeout sieht so aus:
Code:
window.setTimeout("preSelectShippingBilling()", 0);

Wie kann das sein? Was ist da faul? Ich finde nach stundenlangem Suchen einfach keine Lösung.

Ich vermute ja mal das der IE die Methode zum vorselektieren aufruft, wenn die Selectboxen gerade noch von meinem Sript geschrieben/modifiziert werden. Hier hatte ich schon daran gedacht so eine Art Custom Event zu bauen, welches mir meine Pre-Selection Methode aufruft, sobald das Script zum Erzeugen/Modifizieren der Selectboxen durchgelaufen ist. Ich weis aber nicht wie das in Java Script gehen soll.


Viele Grüße,
Uwe
 
Moin Uwe,

Könntest du bitte mal die Codepassage posten, aus der hervorgeht, wie du die Liste füllst und wo du selectedIndex setzen willst.
 
Also hier der Teil wo ich den Index setze:

HTML:
    /* 
     * Selects an address option
     * 
     * @return Address ID
     */
    this.selectAddressOption = function(addressContainerId, addressSelectBoxId, selectedAddressParam, addressName) {
    
        var selAddressIndex    = 0;
        var addressOptions    = $(addressSelectBoxId).options;
        
        for(var index = 0; index < addressOptions.length; index++) {
        
            if((addressOptions[index].value == selectedAddressParam) || 
                    (addressOptions[index].value == addressName)) {
            
                if(index != 0) {
                    
                    $(addressContainerId).hide();
                }
                selAddressIndex = index;
                break;
            }
        }
        
        $(addressSelectBoxId).selectedIndex = selAddressIndex;
        
        return selectedAddressParam ? selectedAddressParam : addressName;
    };

Das ganze Script ist viel zu lang um das hier alles zu posten. :-(
 
Daraus ist auch nichts ersichtlich :(

Mal anders gefragt... wann du die Funktion zum Befüllen aufrufst, hast du ja geschrieben...wann rufts du die Funktion zum selektieren momentan auf?

Und das Füllen der Listen, wie geht das vor sich, ist da evtl. AJAX im Spiel?
 
Die Funktion zum Selektieren wir natürlich ausgeführt nachdem komplett befüllt wurde.
Sorry aber ich will hier kein 800 Zeilen Script posten. *g*

Das ist ja das verrückte. Wieso klappt das nicht? Vor allem warum nur nicht im IE6? Keine Scriptfehler. Nix. Sobald ich die Methode an der selben Stelle mit einem Timeout von 0s aufrufe klappts. Ich weis mir einfach keinen Rat. IE Bug?
 
Hallo,

könnte daran liegen das die Elemente erst gerendert werden müssen und dann ansprechbar sind. Mach doch einen Timout und selectiere dann die Boxen.

salü
 
Genau das mache ich auch. Ich find es nur halt vom Programmierstil her nicht so sauber. Witzig ist vor allem, das ich einen 0ms Timeout setze und es funktioniert einwandfrei. Wehe aber ich entferne den ... dann hat der IE sich wieder komisch.
Allgemein halte ich es für sehr komisch, das nur der IE sich wieder so albern hat. Es gibt ja nicht mal einen Scriptfehler.
 

Neue Beiträge

Zurück