Tobias: Optionen zum Select hinzufügen bei IE5.0

Hi,
habe hier ein mächtiges Problem. Und zwar funktioniert folgende Funktion NICHT im IE5.0 (navigator.appname = 4.0 (compatible; MSIE 5.01; Windows NT ):

function addOption(parent,myvalue,mytext) {
  var added = new Option(mytext, myvalue, false, false);
  parent.options[parent.options.length] = added;
  //var newObj = document.createElement("OPTION");
  //newObj.text  = mytext
  //newObj.value = myvalue;
  //parent.options.appendChild(newObj);
}

beide Lösungen in der Funktion funktionieren nicht. Der BRowser stürzt entweder komplett mit einer nichtssagenden Fehlermeldung ab oder lädt sich an dieser Position tot wonach nur noch ein Neustart des Browsewrs hilft. Der installierte MS Scriptdebugger meldet sich auch nicht.

Alle anderen MSIE Browser ab 5.5 funktionieren bestens.
Habe auch keine Möglichkeit die 5.0 Browser upzugraden :(

ein Beispiel liegt auf u.a. URL.
http://mitglied.lycos.de/donfaustino/js-test.htm

Wer kennt das Prob und weiß Rat?

grüsse
Tobias
http://privat.traffic-eye.de

  1. Hallo Tobias,

    function addOption(parent,myvalue,mytext) {
      var added = new Option(mytext, myvalue, false, false);
      parent.options[parent.options.length] = added;

    ^^^^^^

    Letzter Absatz: http://selfhtml.teamone.de//javascript/objekte/options.htm#neue_elemente

    HTH

    Jochen

    1. function addOption(parent,myvalue,mytext) {
        var added = new Option(mytext, myvalue, false, false);
        parent.options[parent.options.length] = added;
           ^^^^^^

      Letzter Absatz: http://selfhtml.teamone.de//javascript/objekte/options.htm#neue_elemente

      Abschnitt habe ich gelesen: Zitat:
      "Im Internet Explorer 5.0 können Sie nicht fensterübergreifend eine Auswahlliste ändern."
      Ich habe jedoch diese funktion innerhalb einer JS-Klasse eingefügt und das JS Script mittels src="" geladen. Im Fenster will ich dann die Liste mittels onClick="meineKlasse.addOption();" ändern => Absturz
      Ich benutze in meinen Seiten keine Frames.
      hmmm, was nu?

      Tobias

      1. Hallo Tobias,

        Letzter Absatz: http://selfhtml.teamone.de//javascript/objekte/options.htm#neue_elemente

        Abschnitt habe ich gelesen: Zitat:
        "Im Internet Explorer 5.0 können Sie nicht fensterübergreifend eine Auswahlliste ändern."
        Ich habe jedoch diese funktion innerhalb einer JS-Klasse eingefügt und das JS Script mittels src="" geladen.

        Ok, das hatte ich mir nicht so genau angesehen.

        Im Fenster will ich dann die Liste mittels onClick="meineKlasse.addOption();" ändern => Absturz

        Dein Beispiel http://mitglied.lycos.de/donfaustino/js-test.htm ist sehr undurchsichtig. Sorry, aber ich bin da nicht durchgestiegen. Ideal wäre ein einfacher, auf das wesentliche reduzierter Test.

        Hinzu kommt, dass ich hier keinen 5.0er IE zum Ausprobieren habe. Stürzt er dir hier (in der unteren Listbox einen Eintrag selektieren und "Auswählen") auch ab?
        http://www.maxx4u.de/eigene2.html?zeilen=4&kategorie=0

        Grüße,

        Jochen

        1. Hi Jochen,

          Dein Beispiel http://mitglied.lycos.de/donfaustino/js-test.htm ist sehr undurchsichtig. Sorry, aber ich bin da nicht durchgestiegen. Ideal wäre ein einfacher, auf das wesentliche reduzierter Test.

          der ist schon reduziert. Habe nochmal die etwas überarbeitete JS-Klasse hochgeladen. Die wichtigste Funktion ist hierbei die addOption(...) Funktion. Nehme ich da die Select-Zuweisung heraus, klappt es mit dem IE5. Ist sie drin, dann Absturz oder Totladen -> Reset des IE

          Hinzu kommt, dass ich hier keinen 5.0er IE zum Ausprobieren habe. Stürzt er dir hier (in der unteren Listbox einen Eintrag selektieren und "Auswählen") auch ab? http://www.maxx4u.de/eigene2.html?zeilen=4&kategorie=0

          damit klappt es. Musste aber die komplette seite kopieren und mittels einer lokalen Seite testen. Sitze hinter nem PRoxy und der Rechner fürs INet hat IE6.

          weiß auch nicht weiter. Die Funktion ist doch nur in einer externen JS-Datei und alles OHNE Frames :( :(

          Tobias

          1. Sorry Tobias,

            weiß auch nicht weiter. Die Funktion ist doch nur in einer externen JS-Datei und alles OHNE Frames :( :(

            ich auch nicht. Ich kann meinen Vorschlag nur noch einmal wiederholen.
            Reduziere dein javascript solange bis es funktioniert. Baue dann nach und nach einzelne Funktionalitäten wieder hinzu. Und isoliere so den Übeltäter.

            Die wichtigste Funktion ist hierbei die addOption(...) Funktion. Nehme ich da die Select-Zuweisung heraus, klappt es mit dem IE5. Ist sie drin, dann Absturz oder Totladen -> Reset des IE

            Der nicht unbedingt an dieser Stelle sitzen muss. Das ein
            neu = new Option(...) prinzipiell funktioniert haben wir überprüft.

            Grüße,

            Jochen

            1. konnte es noch weiter lokalisieren. wenn ich eine dynamische Liste erstelle

              this.tempsource = document.createElement("SELECT"); var added = new Option(mytext, myvalue, false, false); this.tempsource.options[this.tempsource.options.length] = added;

              und dann dieser eine OPTION zuordne, dann gibts das beschriebene Probleme. Wenn ich jedoch einer "echten" vorhandenen Liste eine Option zuordne, dann funzt es.

              Gibt es noch eine bessere möglichkeit eine Liste dynamisch zu erstellen? Ich möchte mit dieser nur die Elemente der vorhandenen zwischenspeichern.

              tobias

              1. Hallo tobias,

                wenn ich eine dynamische Liste erstelle
                und dann dieser eine OPTION zuordne, dann gibts das beschriebene Probleme.

                Wenn ich jedoch einer "echten" vorhandenen Liste eine Option zuordne, dann funzt es. Ich möchte mit dieser nur die Elemente der vorhandenen zwischenspeichern.

                Wenn es nur um die Zwischenspeicherung geht, und wenn es mit einer "echten" Liste funktioniert. Hast du schon eine versteckte Liste in Betracht gezogen?
                "visibility:hidden;" oder besser vielleicht "display:none;"

                Grüße,

                Jochen

                1. Hi Jochen

                  Wenn es nur um die Zwischenspeicherung geht, und wenn es mit einer "echten" Liste funktioniert. Hast du schon eine versteckte Liste in Betracht gezogen? "visibility:hidden;" oder besser vielleicht "display:none;"

                  das wäre für meine Zwecke seeehr unpraktisch weil ich die ganze funktionalität in einer Klasse gekapselt habe und diese Klasse universell einsetzbar sein soll.

                  Aber jetzt habe ich es hinbekommen!!!!

                  Mal kurz die Auflösung für alle anderen:

                  Fehler: this.target_options = document.createElement("SELECT"); for (var i=0; i < this.source.options.length; i++) {   this.addOption(this.source_options,this.source.options[i].value,this.source.options[i].text); } function addOption(myparent,myvalue,mytext) {  var added = new Option(mytext, myvalue, false, false);  myparent.options[myparent.options.length] = added; }

                  Lösung: this.tempTarget = new Array(); for (i=0; i < this.target.options.length; i++) {    this.tempTarget[i] = new Array();    this.tempTarget[i]["text"] = this.target.options[i].text;    this.tempTarget[i]["value"] = this.target.options[i].value;    this.tempTarget[i]["selected"] = this.target.options[i].selected; }

                  Man beachte hierbei die Umstellung der temorären Liste in ein assoziatives Array. So funzt es auch im IE5 freu

                  grüsse tobias http://privat.traffic-eye.de