Ist es immer noch möglich, dieses Objekt zu erhalten, da das Ereignisobjekt "evt" nicht vom Parameter übergeben wird?
Nein, nicht zuverlässig. IE und einige andere Browser stellen es als window.event
(nicht $(window.event)
) zur Verfügung, aber das ist nicht Standard und wird nicht von allen Browsern unterstützt (bekanntlich Firefox nicht).
Übergeben Sie das Ereignisobjekt besser an die Funktion:
<a href="#" onclick="myFunc(event, 1,2,3)">click</a>
Dies funktioniert auch in Nicht-IE-Browsern, da sie den Code in einem Kontext ausführen, der eine event
Variable enthält (und in IE, weil event
in aufgelöst wird window.event
). Ich habe es in IE6 +, Firefox, Chrome, Safari und Opera versucht. Beispiel: http://jsbin.com/iwifu4
Aber Ihre beste Wette ist , modernes Event - Handling zu verwenden:
HTML:
<a href="#">click</a>
JavaScript mit jQuery (da Sie jQuery verwenden):
$("selector_for_the_anchor").click(function(event) {
myFunc(1, 2, 3);
event.stopPropagation();
});
... oder wenn Sie wirklich passieren wollen event
in myFunc
:
$("selector_for_the_anchor").click(function(event) {
myFunc(event, 1, 2, 3);
});
Der Selektor kann alles sein, was den Anker identifiziert. Sie haben eine sehr umfangreiche Auswahl (fast alle CSS3-Dateien plus einige). Sie können dem Anker ein id
oder hinzufügen class
, aber auch hier haben Sie andere Möglichkeiten. Wenn Sie verwenden können, wo es sich im Dokument befindet, anstatt etwas Künstliches hinzuzufügen, ist das großartig.
In IE können Sie das Ereignisobjekt
window.event
in anderen Browsern ohne'use strict'
Anweisung abrufen. Es ist möglich, durchzukommenarguments.callee.caller.arguments[0]
.function myFunc(p1, p2, p3) { var evt = window.event || arguments.callee.caller.arguments[0]; }
quelle
arguments.callee.caller
eine von HTML generierte anonyme Ereignishandlerfunktion. Das erste Argument ist implizit das Ereignisobjektarguments.callee.caller
wird nicht allgemein unterstützt, ist in einigen Implementierungen, in denen es unterstützt wird, massiv langsam, ist eine wirklich schlechte Idee und wird im strengen Modus nicht zugelassen.Schreiben Sie Ihre Event-Handler-Erklärung wie folgt:
<a href="#" onclick="myFunc(event,1,2,3)">click</a>
Dann kann Ihre Funktion "myFunc ()" auf das Ereignis zugreifen.
Der Zeichenfolgenwert des Attributs "onclick" wird auf eine Weise in eine Funktion konvertiert, die fast genau der des Browsers (intern) entspricht, der den Funktionskonstruktor aufruft:
theAnchor.onclick = new Function("event", theOnclickString);
(außer im IE). Da "event" im IE ein globales Ereignis ist (es ist ein Fensterattribut), können Sie es in jedem Browser auf diese Weise an die Funktion übergeben.
quelle
Wenn Sie Ihren Event-Handler beim Markup aufrufen, wie Sie es jetzt tun, können Sie dies nicht (X-Browser). Wenn Sie das Klickereignis jedoch mit jquery binden, ist dies folgendermaßen möglich:
Markup:
<a href="#" id="link1" >click</a>
Javascript:
$(document).ready(function(){ $("#link1").click(clickWithEvent); //Bind the click event to the link }); function clickWithEvent(evt){ myFunc('p1', 'p2', 'p3'); function myFunc(p1,p2,p3){ //Defined as local function, but has access to evt alert(evt.type); } }
Da die Veranstaltung ob
quelle
event
als Parameter, und LazNiko verlangt dies nicht. Es muss einen anderen Weg geben, aber er ist wertlos, da der Fragesteller weg ist: SclickWithEvent
Funktion vom Markup aus aufzurufen , aber wie wir wissen, ist das Aufrufen vom Markup nicht der beste Weg (und es wäre am Ende die gleiche Lösung).