Elya: Bei Bildwechsel im Popup geht focus des Fensters verloren

Hallo Forum,
mein Popup enthält einen kleinen Bildwechsel, wenn man auf einen Verweis klickt. Ganz simpel mit

messe0a = new Image(); messe0a.src="images/messe_j1.jpg";
messe0b = new Image(); messe0b.src="images/messe_j2.jpg";
function wechsel(nr)
{
if (document.images[nr].src == eval("messe"+nr+"a.src"))
document.images[nr].src = eval("messe"+nr+"b.src")
else
document.images[nr].src = eval("messe"+nr+"a.src")
}

so daß die zwei Bilder immer hin- und hergeklickt werden können.

Außerdem soll das Fenster schließen, wenn man aus Versehen ins Hauptfenster oder sonstwohin klickt. Also im body-tag: onBlur="self.close()".

Jetzt schließt der Browser (IE 5.5 und NN 4.7) das Popup schon beim Anklicken des Verweises...

Warum? Ich hab schon versucht, bei Aufruf der Funktion den Focus wiederzuholen, das ist mir aber mißlungen.

Außerdem läuft das ganze nicht unter NN 6, aber das ist ein anderes Problem... ;)

Hat jemand einen Tipp?

Danke schonmal,
Gruß, Elya

  1. Hi,

    Jetzt schließt der Browser (IE 5.5 und NN 4.7) das Popup schon beim Anklicken des Verweises...

    sehe ich das richtig, dass der Link im Hauptfenster ist? Dieses erhält dabei dann natürlich den Fokus; das andere Fenster verliert ihn also und schließt sich dadurch. Das lässt sich auch nicht verhindern.

    Einen Workaround kann ich Dir aber anbieten: Schließe das Fenster nicht sofort. Setze onBlur einen Timeout (hinreichend lang; Rechner sind oft auch mit anderen Dingen beschäftigt, da kann ein Fokuswechsel schon mal ein Sekündchen dauern), den Du onFocus wieder löschst. "Sauber" ist das natürlich nicht.

    Warum? Ich hab schon versucht, bei Aufruf der Funktion den Focus wiederzuholen, das ist mir aber mißlungen.

    Die Fokussierung findet auf jeden Fall erst dann statt, wenn onBlur bereits gefeuert hat und das Fenster ergo geschlossen wurde. Was weg ist, kann nicht mehr fokussiert werden.

    Außerdem läuft das ganze nicht unter NN 6, aber das ist ein anderes Problem... ;)

    Was heißt "läuft nicht"?

    Cheatah

    1. Hallo Cheatah,

      sehe ich das richtig, dass der Link im Hauptfenster ist?

      nein, nein: alles spielt sich im Popup ab, zwei Bilder, die gegeneinander vertauscht werden, ein Textbutton, der das Ganze auslösen soll - deswegen auch die Verwirrung bei mir...

      Außerdem läuft das ganze nicht unter NN 6, aber das ist ein anderes Problem... ;)

      Was heißt "läuft nicht"?

      Der Bildwechsel bei NN6findet erst gar nicht statt, ob mit oder ohne blur(); aber document.images[] usw. kennt das DOM von NN6 doch noch...?

      Gruß
      Elya

      1. Hi,

        nein, nein: alles spielt sich im Popup ab, zwei Bilder, die gegeneinander vertauscht werden, ein Textbutton, der das Ganze auslösen soll - deswegen auch die Verwirrung bei mir...

        oh. Hast Du das ganze im Netz?

        Der Bildwechsel bei NN6findet erst gar nicht statt, ob mit oder ohne blur(); aber document.images[] usw. kennt das DOM von NN6 doch noch...?

        Hm, sollte es eigentlich (ich gebe zu, mit DOM habe ich mich nur wenig beschäftigt). Bist Du sicher, dass Du keine "Spezialitäten" (<div> o.ä.) in der Seite hast? Klappt der Wechsel, wenn Du document.getElementById() verwendest?

        Cheatah

        1. Hi Cheatah,

          oh. Hast Du das ganze im Netz?

          jetzt ja, auf meinem Testserver: http://www.id-kreativ.de/test/

          das Popup-Dokument heißt joop.html

          Es ist wirklich eine ganz simple Seite mit ganz wenigen Elementen. Deshalb irritiert mich die ganze Sache ja auch so - die komplexen Sachen laufen alle (naja), aber die einfachen treiben mich gelegentlich zum Wahnsinn... ;-)

          Gruß
          Elya

          1. Hi,

            jetzt ja, auf meinem Testserver: http://www.id-kreativ.de/test/
            das Popup-Dokument heißt joop.html

            ...und die CSS-Datei ist nicht da ;-)

            Theorie: Durch den Klick auf <a href> wird dem Browser "vorgegaukelt", dass eine neue Seite geladen werden soll; das onBlur feuert. Das gleiche Phänomen ist z.B. dafür verantwortlich, dass animierte Grafiken in der Seite stoppen.

            Mögliche Lösung: <a href="#" onClick="wechsel(0); return false;">

            Das "return false" solltest Du auch auf der vorherigen Seite verwenden - und bitte, bitte, bitte entferne das "javascript:" aus jedem Event-Handler, der Dir über den Weg läuft! Das ist dort nämlich genau so falsch wie ein "html:" am Beginn jedes HTML-Tags...

            Cheatah

            1. Cheatah, das ist wirklich merkwürden...

              auch mit onClick return false geht es leider nicht, aber mir ist was anderes aufgefallen: das Fenster verliert den focus bei einem beliebigen Klick auf die Seite! Ob auf Bild, daneben oder den Link - da muß es ja wohl an was anderem liegen, oder?

              ...und die CSS-Datei ist nicht da ;-)

              jaja, und die opener-Datei hab ich mal eben hingeschustert, deshalb auch der falsche javascript: im Handler... ;-)

              Gruß

              <ratlos>Elya</ratlos>

              1. Hi,

                Cheatah, das ist wirklich merkwürden...

                ja, das ist es wirklich. Das einzige, das mir jetzt noch einfällt ist folgende Theorie:

                Wenn Du irgendwo in den Seitenbereich klickst, wird der Fokus _zumindest kurz_ auf ein anderes Element gelegt, z.B. auf die Tabelle (auch wenn man außerhalb derselben klickt - dann mag es ein implizites <p> sein). Dadurch feuert onBlur bereits.

                Das klingt zugegebenermaßen leicht schwachsinnig. Zumindest kann ich nicht wirklich einen Sinn darin entdecken ;-) aber möglich wäre es.

                Leider fällt mir dann allerdings auch keine vernünftige Lösung ein... Kannst Du die Geschichte mit dem Timeout, das onFocus zurückgesetzt wird, bitte mal probieren?

                Cheatah