Cursorposition bei Link an JS-Funktion übergeben im NS
Gunther
- javascript
Hallo zusammen,
ich habe folgendes Problem:
Über einen normalen Textlink wird eine JS-Funktion aufgerufen. An diese Funktion soll neben dem Wert einer Variable auch noch die Cursorposition absolut zum Bildschirmfenster übergeben werden.
Für den MSIE ist das auch kein Problem. Der Link sieht so aus:
<a href="javascript:who($boards[threadid])" onclick="pos_y=window.event.clientY, pos_x=window.event.clientX;">
Meine Frage: Wie muss das Ganze für den NS 6 aussehen?
Mir ist bekannt, dass der NS dafür die screenX, bzw. screenY Anweisungen benutzt, allerdings funzt das bei mir nur dann, wenn ich eine Eventüberwachung für das gesamte Dokument habe. Die kann ich aber nicht gebrauchen, da die Funktion ja nur beim anklicken des jeweiligen Links aufgerufen werden soll.
Für Tipps & Ideen besten Dank im voraus!
MfG
Hatten wir diesen Thread nicht schon mal?
OK, was mir einfällt, wäre: Lass den NS doch ruhig
ständig überwachen, onclick machst du dann halt
releaseEvents() oder so ähnlich. (Steht in SelfHTML)
In der Funktion, in der du die Variablen brauchst,
beginnst du halt wieder, die Events zu capturen.
Hatten wir diesen Thread nicht schon mal?
OK, was mir einfällt, wäre: Lass den NS doch ruhig
ständig überwachen, onclick machst du dann halt
releaseEvents() oder so ähnlich. (Steht in SelfHTML)
In der Funktion, in der du die Variablen brauchst,
beginnst du halt wieder, die Events zu capturen.
Hey AB,
ja hatten wir schon! ;-)
Ich weiß auch: "Geduld ist eine Tugend..."
Dein Vorschlag ist aber leider keine Lösung, da die Funktion ja "nur" beim Anklicken bestimmter Links aufgerufen werden soll, und nicht bei jedem Klick auf der Seite.
MfG
Eigentlich meite ich genau das:
<a href="" onclick="document.releaseEvents()">
oder so.
Und wenn die Positionen ausgewertet werden sollen,
das Überwachen wieder starten.
Oder habe ich das Problem nicht ganz richtig verstanden?
Wäre nicht schlecht, wenn ich wüßte, was weiter mit
den Positionen passieren soll.
Wäre nicht schlecht, wenn ich wüßte, was weiter mit
den Positionen passieren soll.
Also: Ich habe eine Seite mit mehreren Links. Bei einigen davon soll beim Anklicken die Cursorposition mit an die JS-Funktion übergeben werden, die mit dem Link aufgerufen wird <a href="javascript: myfunc($myvariable)" ...> !
Die Funktion myfunc wiederum öffnet ein neues Fenster und die übergebene Cursorposition dient dazu, dieses neue Fenster zu positionieren (mit moveTo). Wie eingangs schon erwähnt - für den MSIE alles kein Problem, aber für den NS (>=6)???
Achso: Die Ausgangsseite ist für alle Browser gleich, nur bei den Links wird nach Browsern unterschieden!
Gruß Gunther
Mal zusammenfassen.
Wir haben:
Links, die beim überfahren mit der Maus oder beim
klicken die Mausposition an myfunc mitteilen.
Eine Funktion myfunc, die die Positione der Maus erhält
und das Fenster an dieser Postion öffnet.
Im NS muß man auf jeden Fall die Events vom Seitenladen
an überwachen.
also <body onload="start()">
function start()
{
document.captureEvents(Event.CLICK);
document.onclick=beleg();
}
function beleg()
{
mausxpos=Ereignis.pageX;
mausypos=Ereignis.pageY;
}
function myfunc()
{
window.open(usw usw, mausxpos, mausypos, usw usw);
}
WICHTIG! Die Variablen (In diesem Falle)
mausxpos und mausypos müssen bereits außerhalb
einer Funktion definiert werden, sonst werden sie nicht
gefunden.
Da die Funktion ja sofort ausgeführt wird, werden automatisch die Koordinaten des letzten Mausklicks
übernommen.
Noch ein Problem: Man kann auch mit der Tabulatortaste
einen Link fokussieren und dann Leertaste drücken,
um ihn 'auszuführen'. Dieses Script funktioniert dann
nicht mehr. Egal, müssen die Leute halt auf die Links
klicken.
In Funktion start() muss abefragt werden, ob es ein
NS ist; die Zeile
document.onclick=beleg();
ist auch MS - Syntax; dh sie bleibt immer Stehen.
In beleg() wieder abfragen und
mausxpos=Ereignis.pageX;
mausypos=Ereignis.pageY;
und
mausxpos=Ereignis.event.X;
mausypos=Ereignis.event.Y;
trennen.
So, eigentlich müßte jetzt alles laufen.
Hey AB,
erstmal vielen Dank für deine Mühe. Das finde ich sehr nett von dir.
Du schreibst:
Im NS muß man auf jeden Fall die Events vom Seitenladen
an überwachen.
Wenn dem so ist, dann werde ich das Fenster für NS-User eben fest positionieren, denn das kann ich nicht gebrauchen, da es ja auch noch etliche andere Links auf der Seite gibt. Und dafür wiederum eine extra Funktion machen, die dann prüft, ob es sich um einen Link handelt, der die Funktion myfunc aufrufen soll oder nicht, ist zu aufwendig.
Ausserdem würde die Funktion ja auch immer dann aufgerufen werden, wenn der User irgendwo auf die Seite klickt (oder hab' ich da jetzt einen Denkfehler?).
Auf jeden Fall nochmals vielen Dank!
Gruß Gunther
Die Funktion "beleg" wird bei jedem Klick aufgerufen,
richtig.
Aber "myfunc" wird ja erst beim Klicken auf den Link
ausgeführt, und erst hier werden die Positionen des
Klicks (also dem Klick auf den Link) gebraucht.
Die Funktionen "beleg" und "myfunc" werden beinahe
zeitgleich ausgeführt, daher sind die Positionen von
"beleg" immer aktuell.
Die Funktion "beleg" wird bei jedem Klick aufgerufen,
richtig.
Aber "myfunc" wird ja erst beim Klicken auf den Link
ausgeführt, und erst hier werden die Positionen des
Klicks (also dem Klick auf den Link) gebraucht.
Die Funktionen "beleg" und "myfunc" werden beinahe
zeitgleich ausgeführt, daher sind die Positionen von
"beleg" immer aktuell.
Hey AB,
hatte doch einen kleinen Balken vorm Kopf ;-)
So hab' ich's jetzt eingebaut:
<script language="Javascript" type="text/javascript">
if(navigator.appName=="Netscape") {
pos_x=0;
pos_y=0;
document.onmousedown = Position;
}
function Position(Ereignis) {
pos_x=Ereignis.screenX;
pos_y=Ereignis.screenY;
}
function myfunc() {
...
}
</script>
Nochmals besten Dank (und wenn ich dir mal helfen kann s. Mail-Addy)!!!
Gruß Gunther