AllesMeins: Ich versteh das mit diesen events nicht.

Hiho,

ich versuche gerade die Mausposition abzufragen wenn jemand auf ein Bild klickt. Dafür habe ich mir folgendes Script gebastelt (soweit ich das aus den Dokumentationen hier erschliessen konnte):

function menu (e){
      if (navigator.appName == "Netscape"){
          document.bild_<?php echo $pic_id ?>.onclick = menu;
          x = e.pageX;
          y = e.pageY;
        } else {
          x = window.event.offsetX;
          y = window.event.offsetY;
        }
      alert(x + " - " + y);
}

Das ganze ist dann mit onclick="menu()" eingebaut.

Naja, das ganze funktioniert im Netscape nur halb. Beim ersten klick auf das Bild bekomme ich die Fehlermeldung e has no propertie. Ab dann geht es bis zum nächsten reload der Seite. Wie muss dieses Script richtig heissen damit es bei jedem Versuch klappt?

Marc

  1. Hiho,

    ich versuche gerade die Mausposition abzufragen wenn jemand auf ein Bild klickt. Dafür habe ich mir folgendes Script gebastelt (soweit ich das aus den Dokumentationen hier erschliessen konnte):

    function menu (e){
          if (navigator.appName == "Netscape"){

    Du überprüfst etwas was keinerlei Aussage über das macht was du nbenutzern möchtest.

    Warum testest du nicht das was du verwenden willst:

    if(e)

    document.bild_<?php echo $pic_id ?>.onclick = menu;
              x = e.pageX;
              y = e.pageY;
            } else {
              x = window.event.offsetX;
              y = window.event.offsetY;
            }
          alert(x + " - " + y);
    }

    Das ganze ist dann mit onclick="menu()" eingebaut.

    Es gibt auch die Möglichkeit mit onclick="click(this);"

    Das Objekt direkt zu übergeben und dann die Daten darau lesen.

    Struppi.

    1. Hmm, wenn ich das ganze mit onclick="menu(this)" aufrufe bekomme ich als Wert für x und y nur noch undefined.

  2. hi,

    function menu (e){ ...}
    Das ganze ist dann mit onclick="menu()" eingebaut.

    Naja, das ganze funktioniert im Netscape nur halb. Beim ersten klick auf das Bild bekomme ich die Fehlermeldung e has no propertie.

    die funktion erwartet so, wie du sie definiert hast, einen parameter.
    beim aufrufen übergibst du ihr aber keinen.

    gruss,
    wahsaga

    1. hiho,

      und was muss ich den Ding übergeben damit es funktioniert? Bzw. es funktioniert ja nur halt nicht beim ersten Aufruf...

      Marc

      1. hi,

        und was muss ich den Ding übergeben damit es funktioniert? Bzw. es funktioniert ja nur halt nicht beim ersten Aufruf...

        ich würde vorschalgen, this zu übergeben, um auf das bild, in dem der eventhandler notiert ist, bezug zu nehmen.

        btw: verrätst du mal, was folgende zeile bedeuten soll?

        document.bild_<?php echo $pic_id ?>.onclick = menu;

        du hast für das bild doch bereits onclick="menu" definiert - warum willst du es dann in der funktion noch mal machen? leuchtet mir gerade nicht so wirklich ein.

        gruss,
        wahsaga

        1. hiho,

          ich würde vorschalgen, this zu übergeben, um auf das bild, in dem der eventhandler notiert ist, bezug zu nehmen.

          Hmm. und nun die beliebte Frage: Und wie mach ich das? Sorry, JS ist für mich noch ein Buch mit sechseinhalb Siegeln.

          btw: verrätst du mal, was folgende zeile bedeuten soll?

          document.bild_<?php echo $pic_id ?>.onclick = menu;
          du hast für das bild doch bereits onclick="menu" definiert - warum willst du es dann in der funktion noch mal machen? leuchtet mir gerade nicht so wirklich ein.

          Mir auch nicht. Aber ohne die Zeile funktioniert es gar nicht. Mit der Zeile immerhin beim zweiten mal...

          Grüsse

          Marc

          1. hi,

            ich würde vorschalgen, this zu übergeben, um auf das bild, in dem der eventhandler notiert ist, bezug zu nehmen.
            Hmm. und nun die beliebte Frage: Und wie mach ich das? Sorry, JS ist für mich noch ein Buch mit sechseinhalb Siegeln.

            function menu(obj) {...}

            so, deine function die so definiert ist, erwartet jetzt also die übergabe eines parameters obj (wie "objekt").

            der aufruf erfolgt jetzt beispielsweise über
            <img id="blah" src="blah.gif" onclick="menu(this)" />

            this zeigt immer auf das aktuelle objekt, in dem du halt den eventhandler auch notiert hast.

            in deiner funktion kannst du jetzt über obj auf alle javascript-eigenschaften und -methoden deines bildes mit der id "blah" zugreifen, ohne erst einen umweg über getElementByID() o.ä. gehen zu müssen.

            gruss,
            wahsaga

            1. hiho.

              Ok, mein Script sieht jetzt so aus:
              function menu (e){
                    if (navigator.appName == "Netscape"){
                        //document.bild_<?php echo $pic_id ?>.onclick = menu;
                        x = e.pageX;
                        y = e.pageY;
                      } else {
                        x = window.event.offsetX;
                        y = window.event.offsetY;
                      }
                    alert(x + " - " + y);
              }

              aufgerufen mit onclick="menu(this)". Als Wert bekomme ich nun undefined - undefined ausgegeben. Müsste an Stelle dieses 'this' nicht irgendwie das komplette Dokument. Denn pageX liest ja die Position im kompletten Dokument aus, das hat ja erst mal nichts direkt mit dem Bild zu tun, deswegen ist doch this eigentlich falsch, oder?

              Marc

              1. hi,

                Als Wert bekomme ich nun undefined - undefined ausgegeben.

                reden wir jetzt vom netscape? (und welcher version?)

                Müsste an Stelle dieses 'this' nicht irgendwie das komplette Dokument. Denn pageX liest ja die Position im kompletten Dokument aus, das hat ja erst mal nichts direkt mit dem Bild zu tun, deswegen ist doch this eigentlich falsch, oder?

                so wie ich das beispiel unter http://selfhtml.teamone.de/javascript/objekte/event.htm#page_x_y verstehe, must du das irgendwie gleich an den event binden, anstatt irgendwas mit onclick aufzurufen ...

                gruss,
                wahsaga

                1. Hiho,

                  reden wir jetzt vom netscape? (und welcher version?)

                  Mozilla 1.4. Dabei fällt mir gerade auf, das der IE auch noch Probleme bereitet, er zeigt nämlich die Mausposition auf dem Bild an (0x0 ist die linke obere Ecke des Bildes und nicht der Seite). Also gleich noch ein problem welches es zu lösen gilt... :-/
                  Netscape 4.X habe ich komplett ausser acht gelassen, da dort das komplette Script (vondem meine Problemfunktion nur ein kleiner Teil ist) nicht funktioniert. Dafür werde ich noch nen noscript Pfad bauen...

                  so wie ich das beispiel unter http://selfhtml.teamone.de/javascript/objekte/event.htm#page_x_y verstehe,

                  Damit bist du schon weiter als ich, ich verstehe das Beispiel nämlich nur teilweise :)

                  must du das irgendwie gleich an den event binden, anstatt irgendwas mit onclick aufzurufen ...

                  Hmm, aber wie. Das ganze soll doch nur beim Klick auf ein Bild ausgeführt werden. Ich will doch nur die Mausposition bei eben diesem Klick rausfinden, das kann doch net so schwer sein...

                  Grüsse

                  Marc

  3. Hallo,

    ich versuche gerade die Mausposition abzufragen wenn jemand auf ein Bild klickt. Dafür habe ich mir folgendes Script gebastelt (soweit ich das aus den Dokumentationen hier erschliessen konnte):

    function menu (e){

    Mozilla und Opera übergeben das Event-Objekt als Parameter, wenn der Event so definiert wurde:
    bild.onclick = menu;

    Wird der Event im Element definiert (<img onclick='menu()'>), wird nichts übergeben. Man könnte aber auch hier den Event übergeben: <img onclick='menu(event)'>. Dann wäre das e auch im IE definiert, und da (soweit ich weiß) alle moderneren Browser clientX/Y unterstützen, könnte man einfach schreiben:

    x = e.clientX;
             y = e.clientY;

    alert(x + " - " + y);
    }

    Grüße, Stefan

  4. hi,

    if (navigator.appName == "Netscape"){

    welchen Netscape meinst Du? Afaik kennt NC4x onclick nicht in Bildern. Dafuer muesstest einen Div-Layer nehmen.

    x = e.pageX;
              y = e.pageY;

    Was willst Du, Fensterposition, oder Position im Bild? Das hier liefert Fensterposition

    x = window.event.offsetX;
              y = window.event.offsetY;

    das hier Klickposition im Bild. Probier das mal:

    <html>
    <head>
    <script language="javascript1.2" type="text/javascript">
    function init() {
     if(document.layers) {
      document.bild1.captureEvents(Event.CLICK);
      document.bild1.onclick = dplPos;
     } else {
      document.getElementById("bild1").onclick = dplPos;
     }
    }

    function dplPos(e) {
     if (e) {
      document.dpl.out.value=e.layerX + " - "  + e.layerY;
     } else {
      document.dpl.out.value=window.event.offsetX+ " - "  + window.event.offsetY
     }
     if (document.layers) releaseEvents(e);
    }
    </script>
    <style type="text/css">
    #bild1 {
     position:absolute;
     top:100px;
     left:100px;
     width:200px;
     height:200px;
     visibility:visible;
     background-color: red;
     layer-background-color: red;
     border: none;
    }
    </style>
    </head>
    <body onload="init()">
    <form Name="dpl">
        <input type="text" name="out" size="30">
    </form>
    <div id="bild1">Erstes Div</div>
    </body>
    </html>

    Gruesse  Joachim

  5. ich versuche gerade die Mausposition abzufragen wenn jemand auf ein Bild klickt. Dafür habe ich mir folgendes Script gebastelt (soweit ich das aus den Dokumentationen hier erschliessen konnte):

    Da mich das Problem interesierte hab ich mal eine Bibliothek gebastelt, mit der du an deine Informationen kommen kannst.
    http://home.arcor.de/struebig/js/lib/mouse.html

    Struppi.