prüfen ob klick was auslöst
bert
- javascript
Guten Morgen,
kann ich mit JS im Nachhinein prüfen, ob ein Klick irgendwas ausgelöst hat? Also im Nachhinein, weil ich nicht alle Klicks so programmieren will, dass eine Variable gespeichert wird.
Also am liebsten wäre mir beispielsweise onclick im BODY tag, welches prüft:
wenn klick was ausgelöst hat {}
sonst {}
Hi,
kann ich mit JS im Nachhinein prüfen, ob ein Klick irgendwas ausgelöst hat?
Geht's etwas genauer - was stellst du dir vor, und welchen Zweck soll das überhaupt haben?
Also im Nachhinein, weil ich nicht alle Klicks so programmieren will, dass eine Variable gespeichert wird.
Was für Variablen?
Also am liebsten wäre mir beispielsweise onclick im BODY tag, welches prüft:
wenn klick was ausgelöst hat {}
sonst {}
Wenn der Klick bspw. den Wechsel zu einer anderen Ressource ausgelöst hat, dann wird (je nach Browser) gar kein weiteres JS mehr ausgeführt. (OK, onbeforeunload o.ä. könnte sich da ggf. noch reinhängen.)
Generell liegt dein Einstiegspunkt mit onclick *vor* dem Ausführen der Default-Aktion, die ein Klick auslöst.
Du könntest natürlich zu dem Zeitpunkt schon schauen, worauf geklickt wurde - ist es ein Link, ein Formularbutton, ...?
Aber auch dabei können dir wieder onclick-Handler auf anderen Elementen in die Quere kommen - da ein Klick von diesen erst zum BODY hoch bubbled, würde auch das wiederum ausgeführt, bevor dein Prüf-Handler was davon mitbekommt. Wenn du das umgehen willst, dann bist du schon nah dran, dein komplettes Eventhandling umzuschreiben.
MfG ChrisB
hi,
Also am liebsten wäre mir beispielsweise onclick im BODY tag, welches prüft:
wenn klick was ausgelöst hat {}
sonst {}
notiere den Eventhandler besser nicht direkt im Tag, sondern belege einfach deine document.onclick
-Eigenschaft mit function(Erg) {if(!Erg) Erg = window.event;};
, denn dann kannst du auf das Eventobjekt zugreifen.
Im Mozilla könntest du mit [link:http://www.html-world.de/program/js_o_eve.php#target@title=e.target.nodeName]
arbeiten und überprüfen, ob das Element ein Formularfeld oder ein Link ist. Falls du auch überprüfen willst, ob ein Eventhandler ausgeführt wurde, kannst du das mit new Boolean(e.target.onclick)
herausfinden.
Da der IE diese Eigenschaft leider nicht unterstützt, musst du da mit Ranges an den Start gehen. Dein Script könnte ca. so aussehen:
document.onclick = function(e) {
if(!e)
e = window.event;
var target = e.target;
if(!target) {
target = document.body.createTextRange();
target.moveToPoint(e.clientX, e.clientY);
target = target.parentElement();
}
alert(target.nodeName);
alert(new Boolean(target.onclick));
}
lg JeSchnell
Vielen Dank! Genau was ich brauche!
Vielen Dank! Genau was ich brauche!
hoffentlich nciht.
Struppi.
Im Mozilla könntest du mit
[link:http://www.html-world.de/program/js_o_eve.php#target@title=e.target.nodeName]
arbeiten und überprüfen, ob das Element ein Formularfeld oder ein Link ist. Falls du auch überprüfen willst, ob ein Eventhandler ausgeführt wurde, kannst du das mitnew Boolean(e.target.onclick)
herausfinden.
Das ist doch alles Unsinn was du da schreibst.
Das Objekt das den Event ausgelöst hat, kannst du auch im IE ermitteln und warum du ein Boolean Objkekt erzeugst, ist ein Rätsel. Und was willst du mit der Eigenschaft onclick?
document.onclick = function(e) {
if(!e)
e = window.event;
und dann:
var target = e.target || e.srcElement;
alert(target.nodeName);
Ich bevorzuge tagName
alert(new Boolean(target.onclick));
und das ist Unsinn, wenn du die Art des Events herrausfinden willst, benutze e.type
Struppi.
Das Objekt das den Event ausgelöst hat, kannst du auch im IE ermitteln und warum du ein Boolean Objkekt erzeugst, ist ein Rätsel. Und was willst du mit der Eigenschaft onclick?
Mit document.onclick
verfolge ich alle onclick-Ereignisse dieses Dokuments. Aber ich glaube, dass war nicht, was du wissen wolltest, oder?
var target = e.target || e.srcElement;
Diese Eigenschaft war mir bis jetzt unbekannt; danke!
Ich bevorzuge tagName
"The value of tagName is the same as that of nodeName."
alert(new Boolean(target.onclick));
und das ist Unsinn, wenn du die Art des Events herrausfinden willst, benutze e.type
Nein, es war nicht Zweck der Übung, die Art des Events herauszufinden, sondern auszulesen, ob dieser Klick des Benutzers schon etwas anderes ausgeführt hat.
Ich wollte dies realisieren, indem ich zuerst einmal (mit .nodeName
) überprüfe, ob dieses Element ein Verweis ist. Natürlich könnte man sicherlich noch auf einen richtigen href-Tag etc. testen, aber zur Demonstration der Funktionalität habe ich den .nodeName
ausgelesen.
Danach überprüfe ich, ob das Element einen eigenen .onclick
-Eventhandler besitzt. Für den professionellen Einsatz müsste man sicherlich auch hier noch alle Vorfahrenelemente auf Handler überprüfen, aber für dieses einfach Beispiel beließ ich es darauf. Daraus machte ich dann einen bool-Wert. im if()
-Gebrauch wäre dies nicht notwendig, aber da ich dies mit window.alert()
ausgebe...
lg JeSchnell