Holger Schwarze: Event "mouseup" bei Opera7 fehlerhaft?

Hi Folks! :)

Bin gerade am Entwickeln eines JavaScript-Scrollbalkens. Dabei bin ich auf folgendes Problem gestossen:

Opera (v7.23) registriert keine MouseUp-Events, wenn das MouseDown-Event in einem tieferen Frame stattgefunden hat. Zumindest ist das meine bisheriger Erkenntnis.

Mein Quellcode sieht so aus:

Ich habe eine Startseite, in der einfach 2 iframes liegen:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head><title>Untitled</title></head>
  <body>
    mainframe<br>
    <iframe name="links" id="links" src="links.htm" height="200" width="200"></iframe>
    <iframe name="rechts" id="rechts" src="rechts.htm" height="200" width="200"></iframe>
  </body>
</html>

Das iframe mit der ID "links" ist einfach nur ein Dummy:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head><title>Untitled</title></head>
  <body>
    links
  </body>
</html>

Im iframe mit der ID "rechts" ist jetzt das JavaScript definiert:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head><title>Untitled</title></head>
  <script language="JavaScript">
    function start() {
      document.addEventListener( "mouseup", mouseup, true );
      top.links.document.addEventListener( "mouseup", mouseup, true );
      top.document.addEventListener( "mouseup", mouseup, false );
    };
    function mouseup( event ) {
      document.getElementById( "inputText" ).value = event.screenX + " - " + event.screenY;
    };
  </script>
  <body>
    rechts<br>
    <span onclick="javaScript:start();">[start mouseup]</span><br>
    <input type="Text" id="inputText"></div>
  </body>
</html>

Das sollte im Mozilla und Opera funktionieren, nicht jedoch im IE, da das W3C-konforme Event-Handling benutzt wird.

Ich habe es auch auf folgende URL hochgeladen:
http://www.ingenium.de/test/

Sobald alles geladen ist, und [start mouseup] angeklickt wurde, sollten im input-Feld die Koordinaten des letzten Mouse-Up-Events erscheinen. Klappt auch wunderbar: klick im rechten iframe, klick im linken iframe, klick im Hauptfenster, alles ok. Wenn ich jetzt aber zwischen Maustaste drücken und loslassen über ein anderes Frame gehe, macht Opera Probleme:

Solange ich in einem übergeordneten Frame die Maustaste drücke, und in einem davon untergeordneten Frame loslasse, zeigt er auch die Koordinaten an. Sollte ich jetzt aber mit gedrückter Maustaste über ein übergeordnetes Frame gehen, oder ein Schwester-Frame (also z.B. von "links" nach "rechts", oder von "rechts" zum "mainframe") wird gar kein MouseUp-Event ausgelöst...?!

Kann mir jemand einen Workaround zeigen?

Wie gesagt, das Problem tauchte bei der Entwicklung eines Scrollbalkens auf. Wenn ich den Scrollbalken bewege, dabei aber mit der Maus über ein anderes Frame fahre und dort loslasse, bleibt der Scrollbalken an der Maus "befestigt"...

cu

  1. hi,

    Wenn ich jetzt aber zwischen Maustaste drücken und loslassen über ein anderes Frame gehe, macht Opera Probleme:

    Solange ich in einem übergeordneten Frame die Maustaste drücke, und in einem davon untergeordneten Frame loslasse, zeigt er auch die Koordinaten an. Sollte ich jetzt aber mit gedrückter Maustaste über ein übergeordnetes Frame gehen, oder ein Schwester-Frame (also z.B. von "links" nach "rechts", oder von "rechts" zum "mainframe") wird gar kein MouseUp-Event ausgelöst...?!

    erscheint mir durchaus vernünftig, dieses verhalten.

    du solltest nicht vergessen, dass du dich dann in einem vollkommen anderen, eigenständigen dokument befindest, welches von den events, die in anderen dokumenten stattgefunden haben, keine ahnung hat.

    gruss,
    wahsaga

    1. hi,

      du solltest nicht vergessen, dass du dich dann in einem vollkommen anderen, eigenständigen dokument befindest, welches von den events, die in anderen dokumenten stattgefunden haben, keine ahnung hat.

      Nein, denn die anderen Frames haben ja auch einen Event-Handler... Also müssten die auch auf MouseUp-Events reagieren...