Stefan Link: Auf onclick reagieren Netscape

Hallo community,

Folgendes Problem: ich habe eine HTML-Seite auf der ich die Koordinaten eines Mausklicks in einem DIV auslesen und anzeigen lassen möchte.

Das Div:

<div onclick="javascript:mouse_pos();" ...>

Die mouse_pos():

function mouse_pos()
{
  var evt = window.event;
  var pos = new Object();

var name = navigator.userAgent.toLowerCase()

// IE
  if(name.indexOf("msie") != -1)
  {
    pos.left = evt.clientX;
    pos.top  = evt.clientY;
  }
  else
  {
    // Hier ist das Problem
  }
}

Ich weiß inzwischen, dass die nicht-IE-Browser hier mit layerX und layerY arbeiten. Das Problem ist aber grundlegender: wie handle ich den event? window.event hat keine Methoden (laut debugger) und window.layerX oder event.layerX ist jeweils undefiniert.

Kann mir jemand auf die Sprünge helfen?

Vielen Dank!

  1. Hi Stefan!

    e.pageX und
    e.pageY

    du musst aber in deiner Funktion mouse_pos(e) das "e" übergeben, dann klappts auch mit dem Netscape 4.

    Viel Spaß

    Afra

    1. Hi Afra,

      super danke!

      du musst aber in deiner Funktion mouse_pos(e) das "e" übergeben

      Aber nochmal nachgefragt: ich müsste ihm ja da dann das event übergeben, weil einfach e reinpinseln is ja nicht oder? Muss ich dann vorher e als event irgendwie bekannt machen?

      Danke!

      1. Hi,

        Aber nochmal nachgefragt: ich müsste ihm ja da dann das event übergeben, weil einfach e reinpinseln is ja nicht oder? Muss ich dann vorher e als event irgendwie bekannt machen?

        Nein, das macht Netscape für dich.

        Soweit ich mich erinnere, übergibt die JS-Engine von Netscape und seinen Verwandten immer ein Objekt vom Typ Event an einen JS-Eventhandler. Aber nur wenn du es in der Funktionsdeklaration nennst, kannst du es auch ansprechen. Andernfalls wird der Funktion eine Information übergeben, die niemand nutzt.

        Du musst dieses Objekt natürlich nicht 'e' nennen. Aber diese Benamsung hat sich irgendwie eingebürgert.

        Alles klar?

        Martin

        1. Es wird Stück für Stück klarer :). So sieht die Funktion jetzt momentan aus:

          function mouse_pos(evt)
          {
            if(!evt) evt = window.event;
            var pos = new Object();

          if(document.layers)
            {
              pos.left = evt.pageX;
              pos.top  = evt.pageY;
            }
            else
            {
              pos.left = evt.clientX;
              pos.top  = evt.clientY;
            }
          }

          Wenn ich aber nun onclick="javascript:mouse_pos()" noch angleichen will ist mir noch nicht ganz klar wie. Oder muss ich an der Funktion nochmal was drehen?

          Danke für die Geduld :)

          1. Ich hab's zwar nicht ausprobiert, weil sich meine Einstellung zu Javascript im Lauf der Zeit zum Negativen verändert hat. Aber das hier ...

            function mouse_pos(evt)
            {
              if(!evt) evt = window.event;
              var pos = new Object();

            [...]

            }

            sieht eigentlich schon sehr vielversprechend aus.

            Wenn ich aber nun onclick="javascript:mouse_pos()" noch...

            Das da -----------------------^^^^^^^^^^^
            hat an dieser Stelle nichts verloren. Eventhandler verweisen immer auf ein Script, deswegen ist die Angabe weder nötig noch ratsam. Ansonsten ist der Aufruf IMHO in Ordnung.
            Browser der alten Netscape-Familie übergeben hier ohne Aufforderung noch das Event-Objekt als Parameter, das du ja in deiner Funktion korrekt abfragst.

            Oder muss ich an der Funktion nochmal was drehen?

            Ich glaube nicht - aber mit den Feinheiten solltest du nun selber klarkommen, weil mich bei derartigen Details doch so langsam die Sicherheit und die Überzeugung verlässt. ;)

            Bye,

            Martin

      2. Hallo Stefan!

        http://pc-anfaenger.de/script/jsverpo1.htm

        Hilft Dir vielleicht weiter. Die Seite erklärt Dir alles. Hättest Du aber auch mit ein wenig Googlen finden können.

        Teste! ;o)

        1. Danke afra, endlich ne brauchbare Seite :-)

          1. Hallo Stefan,

            Danke afra, endlich ne brauchbare Seite :-)

            Brauchbar? Das war es vielleicht vor fünf oder mehr Jahren. Aus heutiger Sicht kann man das Beispiel in die Tonne kloppen, da es weder den Standard-Modus vom IE 6 berücksichtigt , geschweige denn irgendeinen modernen standard-konformen Browser wie Mozilla/Firefox/Netscape6+, Opera, KHTML/Safari.

            Spontan fallen mir als gute Quellen für Javascript/DHTML QuirksMode sowie Struppis Javascript-Seite ein.

            MfG, Mülli

            --
            Viva Colonia!
            1. Hi Stefan!

              Da hast Du natürlich recht. Ihm ging es aber nur um den Netscape 4. Dafür war es ein wirklich brauchbarer Link. Man muss immer unterscheiden für welchen Zweck man eine Quelle benötigt. ;)

              Schönen Gruß

              Afra

  2. Hi Stefan,

    zusätzlich zu der Hilfestellung von afra möchte ich noch eindringlich darauf hinweisen, dass du NICHT das navigator-Objekt abfragen solltest, um daraus auf Browserfähigkeiten zu schließen.
    Frage dazu lieber die Existenz der Eigenschaften und Methoden ab, die du benutzen willst.
    Oder auf welchen Browser wurdest du tippen, wenn der UserAgent lautet
    "Mozilla/4.0 (compatible; Generic Browser; Win32)"?
    Kleiner Tip: Jetzt gerade ist es ein MSIE 5.5, aber in einer halben Stunde könnte es auch mein Firefox sein, der meldet sich genauso.  :)

    In diesem Sinne,

    Martin

    1. Hi Martin,

      danke für den Tipp, du meinst also z.b. if(documen.layers) ?

      Gruß
      Stefan

      1. Hallo,

        danke für den Tipp, du meinst also z.b. if(document.layers) ?

        Ja, zum Beispiel. Das ist ehrlicher als eine UserAgent-Abfrage.

        Ich habe mich inzwischen eine ganze Weile nicht mehr mit JS beschäftigt, so dass ich dir nicht aus dem Handgelenk sagen könnte, welcher Browser genau welche Objekte und Methoden kennt. Aber mir scheint, du hast verstanden, was ich damit sagen wollte.

        Denn wenn du bestimmte Browserfunktionen nutzen willst, dann braucht es dich doch nicht zu interessieren, wie dieser Browser heißt (oder zu heißen behauptet). Sondern dich interessiert, ob er das kennt, was du von ihm willst.

        So long,

        Martin

        1. Kapiert und eingebaut ;-).

          Danke!

  3. Kann mir jemand auf die Sprünge helfen?

    Das hatte ich dir doch bereits gezeigt: https://forum.selfhtml.org/?t=100908&m=618901 les mal den letzten Satz.

    Struppi.

  4. Ach noch was.

    Das Div:

    <div onclick="javascript:mouse_pos();" ...>

    Das 'javscript:' Label ist hier überflüssig.

    Und du musst hier den Event übergeben. Das wird schön auf der Quirksmode seite http://www.quirksmode.org/js/introevents.html gezeigt.

    Die mouse_pos():

    function mouse_pos()
    {
      var evt = window.event;
      var pos = new Object();

    var name = navigator.userAgent.toLowerCase()

    // IE
      if(name.indexOf("msie") != -1)
      {
        pos.left = evt.clientX;
        pos.top  = evt.clientY;
      }
      else
      {
        // Hier ist das Problem
      }
    }

    wie kommst du jetzt auf sowas?
    clientX/Y können alle Browser ausser NC 4 (wie du auf meiner Seite schon gesehen hast und auch hier http://www.quirksmode.org/js/events_compinfo.html nachlesen kannst)

    Kann mir jemand auf die Sprünge helfen?

    Das ist jetzt der zweite Sprung.

    Struppi.