Matthias: Neue Grafik wird nicht angezeigt

Ich habe folgendes Problem (Netscape 4, IE4)

Ich möchte eine Grafik, die in einer div-Umgebung definiert wurde,
"onClick" verändern. Parameter der "onClick"-Funktion ist u.a. das
neue Grafikobjekt ("NeuesMenueBild").

Dazu verwende ich folgenden Befehl:
document.DivName.document.images[0].src = NeuesMenueBild.src;

Daraufhin verschwindet die alte Grafik, die neue erscheint aber
nicht. Man sieht also nichts.

Wenn ich nun hinter den Befehl z.B.
alert(document.DivName.document.images[0].src);
setze, erscheint die Grafik.

Das ist mir auch insofern ein Rätsel, als dieses Problem bei
machen Grafiken auftritt und bei machen nicht.

Woran könnte das liegen?

  1. Moin!!!

    Ich habe folgendes Problem (Netscape 4, IE4)

    Ich möchte eine Grafik, die in einer div-Umgebung definiert wurde,
    "onClick" verändern. Parameter der "onClick"-Funktion ist u.a. das
    neue Grafikobjekt ("NeuesMenueBild").

    Dazu verwende ich folgenden Befehl:
    document.DivName.document.images[0].src = NeuesMenueBild.src;

    Nach meinen letzten Informationen ist dieser Umweg über das doppelte Dokument nur für den Netscape notwendig. IE (und alle anderen Browser, AUSSER eben NS4) können auf alle Bilder per document.images zugreifen. Kann sein, daß der IE aus lauter Freundlichkeit die NS4-Variante auch zuläßt.

    Daraufhin verschwindet die alte Grafik, die neue erscheint aber
    nicht. Man sieht also nichts.

    Grafiken vorladen wäre vielleicht gut. Dann dauerts nicht so ewig, bis die Grafik da ist. Oder von welchen Größen reden wir?

    Wenn ich nun hinter den Befehl z.B.
    alert(document.DivName.document.images[0].src);
    setze, erscheint die Grafik.

    Etwas mehr Quellcode wäre dann doch gut. Am besten ein Link!

    Das ist mir auch insofern ein Rätsel, als dieses Problem bei
    machen Grafiken auftritt und bei machen nicht.

    Woran könnte das liegen?

    Gute Frage. Noch keine Ahnung.

    - Sven Rautenberg

    1. Moin!!!

      Grüß Gott!  ;-)

      Nach meinen letzten Informationen ist dieser Umweg über das doppelte Dokument nur für den Netscape notwendig. IE (und alle anderen Browser, AUSSER eben NS4) können auf alle Bilder per document.images zugreifen. Kann sein, daß der IE aus lauter Freundlichkeit die NS4-Variante auch zuläßt.

      Klar. Für den IE  verwende ich
              document.images["BildName"].src = NeuesMenueBild.src;

      Grafiken vorladen wäre vielleicht gut. Dann dauerts nicht so ewig, bis die Grafik da ist. Oder von welchen Größen reden wir?

      Kleiner 10 KB. Vorgeladen habe ich alle Grafiken mit
              Grafik=new Array();

      Grafik[0]=new Image(); Grafik[0].src="DateiName.gif"
              ...

      Etwas mehr Quellcode wäre dann doch gut. Am besten ein Link!

      http://www2.informatik.uni-erlangen.de/IMMD-II/Persons/Researchers/msgroebn/

      Gute Frage. Noch keine Ahnung.

      Trotzdem einstweilen herzlichen Dank!

      Matthias

      1. Hi Matthias,

        im Netscape-Zweig notierst Du:

        document.Hauptseite.document.images[0].src = NeuesMenueBild.src;

        NeuesMenueBild.src ist aber (soweit ich sehen kann) nirgendwo definiert. Dann kann er ja auch nix wechseln :-)

        Grüße,

        Utz

        1. Hallo Utz,

          document.Hauptseite.document.images[0].src = NeuesMenueBild.src;
          NeuesMenueBild.src ist aber (soweit ich sehen kann) nirgendwo definiert. Dann kann er ja auch nix wechseln :-)

          Doch, NeuesMenueBild ist der Übergabeparameter Nummer 2 der Funktion "aktiv".

          Und wie gesagt, bei manchen Grafiken klappt's, bei manchen nicht.

          Matthias

          1. Hi Matthias,

            Doch, NeuesMenueBild ist der Übergabeparameter Nummer 2 der Funktion "aktiv".

            Ach so, so soll das laufen :-)

            Dann versuch mal

            document.Hauptseite.document.images[0].src = eval(NeuesMenueBild.src);

            oder

            document.Hauptseite.document.images[0].src = eval(NeuesMenueBild + '.src');

            Grüße,

            Utz

            1. Dann versuch mal
              document.Hauptseite.document.images[0].src = eval(NeuesMenueBild.src);
              oder
              document.Hauptseite.document.images[0].src = eval(NeuesMenueBild + '.src');

              Vielen Dank, aber das hat überhaupt nichts gebracht. Hätte mich
              auch gewundert. NeuesMenueBild ist ja eine Referenz auf ein Grafik-Objekt,
              wieso sollte man das evaluieren?

              Was könnte es sonst sein?

              Matthias

              1. Hi Matthias,

                NeuesMenueBild ist ja eine Referenz auf ein Grafik-Objekt,
                wieso sollte man das evaluieren?

                Ich kann's Dir in der Theorie nicht schlüssig erklären, nur das doof praktische: "Weil's halt manchmal nicht anders geht"

                Im übrigen sorry, dass die beiden hingeschmuddelten Schnippsel nicht gingen, das war 'ne Erinnerungslücke :-) Ich hab' jetzt mal entsprechenden Code rausgesucht, den ich praktisch im Einsatz habe, das wäre dann:

                eval('document.Hauptseite.document.images[0].src = ' + NeuesMenueBild + '.src');

                Was könnte es sonst sein?

                Wenn das auch nicht hilft bin ich ansonsten ratlos.

                Grüße,

                Utz

                1. eval('document.Hauptseite.document.images[0].src = ' + NeuesMenueBild + '.src');

                  Nein, auch das bringt nichts. Gleicher Effekt wie vorher.

                  Hm.

                  1. Hi Matthias,

                    na, dann müssen wir da wohl ans Eingemachte. Erstmal solltest Du versuchen, Syntaxungereimtheiten glattzubügeln, also wirklich jede Anweisung mit ; abschließen, auch am Zeilenende. Dann die Event-Handler auch in Groß-/Kleinschreibung (onClick, onMouseover usw.) und die Funktionsaufrüfe in den Event-Handlern auch mit ; abschließen. Das löst aber das Problem wahrscheinlich nicht.

                    Ich konnte den Fehler nur bei Aufruf von aktiv() feststellen; der wesentliche Unterschied zu den anderen Funktionen ist, dass dort auch reset() aufgerufen wird. Das lässt mich an ein Reihenfolgenproblem denken. Probier doch mal spaßeshalber ob sich was ändert, wenn Du zwischen reset() und switch ein sinnloses alert reinbaust.

                    Dann fällt mir auf, dass nach Aufruf von aktiv() der Sanduhr-Cursor nicht mehr weggeht, so als würde die JS-Engine dauerhaft arbeiten und die Funktion nie beendet werden. Da kommt mir zuerst nur wieder das Reihenfolgenproblem in denn Sinn, und dann fällt mir noch ein, dass es vor langer langer einige Threads zu solchen Problemen gab. Wenn es das Reihenfolgenproblem auch nicht ist, würde ich ne Archivsuche nach diesen Threads empfehlen.

                    Grüße + viel Glück!

                    Utz