Axel Richter: Client x/y - und weitere Variabeln.

Beitrag lesen

Hallo,

ich habe auf den SelfHTML Seiten immerhin schon ein Script gefunden was ich suchte, nur bei der Erweiterung des Scriptdes gibt es leider Probleme. Konnte keinen passenden beitrag finden der dieses Problem beschreibt.

DAS SCRIPT:

function Show_K (Ereignis) {
  if (!Ereignis)
    Ereignis = window.event;
  if (document.getElementById) {
    document.getElementById("ads").style.visibility="visible"
    document.getElementById("ads").style.left  = Ereignis.clientX + "px";
    document.getElementById("ads").style.top = Ereignis.clientY + "px";
  } else if (document.all) {
    document.all.ads.style.visibility="visible"
    document.all.ads.style.left = Ereignis.clientX;
    document.all.ads.style.top = Ereignis.clientY;
  }
}

Es soll wie im SelfHTML Beispiel ein layer an der aktuellen mausposition angezeigt werden. Funktioniert soweit auch klasse !

Bis hierher könnte es das, ja.

Allerdings soll der Layer bei mir erst angezegt werden wenn auf einen "Link" geklickt wurde..
<span onClick="JavaScript: Show_K()">
Funktioniert auch !

Nein, bzw. nur in einem Browser. Dur rufst Show_K() ja _immer_ ohne Argumente auf. Für das DOM-Eventhandling wird aber das Event als Parameter erwartet.

Mal davon abgesehen, ist der Label "JavaScript:" dort unsinnig.

Damit das in allen Browsern funktioniert, muss dem Eventhandler onclick des SPAN-Elements die Funktionsreferenz Show_K übergeben werden. Das passiert etwa so:

Im zentralen SCRIPT-Bereich, wo auch Show_K definiert wird:
...
function init() {
  if (document.getElementById) {
    document.getElementById("mySpan").onclick = Show_K;
  }
}
...

und im HTML:
...
<body onload="init()">
...
<span id="mySpan">
...

Damit wird bei BODY.onload Deinem SPAN für onclick eine Referenz auf die Funktion Show_K zugewiesen. Das ist unabhängig von der Anzahl der Argumente der Funktion.

Die entsprechende Funktionalität für document.all darfst Du bitte selbst ergänzen, wenn Du solch alte Browser noch unterstützen möchtest.

ABER... Und jetzt kommts . Wenn ich der Funktion Show_K() noch einige Informationen mitgeben möchte, z.B. irgendeine UserID dann gibts Fehler.

Ja, dann muss die Funktion ja mehr als ein Argument erwarten. Bisher erwartet sie _ein_ Argument "Ereignis". Sie muss also nun mehrere Argumente erwarten:

function Show_K (Ereignis, nochwas) {
...

Das Problem wird nun der Aufruf bei onclick. Hier darf nun nicht mehr eine einfache Referenz übergeben werden, sondern es muss eine anonyme Funktion übergeben werden, die _ein_ Argument, nämlich das Event erwartet und dann ihrerseits wieder Show_K mit diesem Argument und dem weiteren Argument aufruft:

function init() {
  if (document.getElementById) {
    document.getElementById("mySpan").onclick = function(e) {Show_K(e, "Test");};
  }
}

Bei Klick auf das SPAN würde nun bei Show_K das e oder beim IE undefined in Ereignis und "Test" in nochwas stehen.

viele Grüße

Axel