リンクにonclick
属性があります:
<a href="#" onclick="myFunc(1,2,3)">click</a>
これは、JavaScriptのこのイベントハンドラーを指します。
function myFunc(p1,p2,p3) {
//need to refer to the current event object:
alert(evt.type);
}
イベントオブジェクト「evt」はパラメータに渡されないため、このオブジェクトを取得することは可能ですか?
window.event
と$(window.event)
を試しましたが、両方ともundefined
です。
何か案が?
イベントオブジェクト「evt」はパラメータから渡されないため、このオブジェクトを取得することは可能ですか?
いいえ、信頼できません。 IEおよび他の一部のブラウザはwindow.event
($(window.event)
ではない)として使用可能にしますが、これは非標準であり、すべてのブラウザでサポートされていません(有名なFirefoxではありません)。
イベントオブジェクトを関数に渡す方が良いでしょう:
<a href="#" onclick="myFunc(event, 1,2,3)">click</a>
IE以外のブラウザでも、event
変数を持つコンテキストでコードを実行するため、動作します(event
はwindow.event
に解決されるため、IEで動作します) 。 IE6 +、Firefox、Chrome、Safari、Operaで試しました。例: http://jsbin.com/iwifu4
ただし、bestの賭けは、最新のイベント処理を使用することです。
HTML:
<a href="#">click</a>
JQueryを使用するJavaScript(jQueryを使用しているため):
$("selector_for_the_anchor").click(function(event) {
// Call `myFunc`
myFunc(1, 2, 3);
// Use `event` here at the event handler level, for instance
event.stopPropagation();
});
...またはevent
をmyFunc
に本当に渡したい場合:
$("selector_for_the_anchor").click(function(event) {
myFunc(event, 1, 2, 3);
});
セレクタは、アンカーを識別するものであれば何でもかまいません。 非常に豊富なセット から選択できます(CSS3のほぼすべてに加えていくつか)。アンカーにid
またはclass
を追加できますが、ここでも他の選択肢があります。何か人工的なものを追加するのではなく、ドキュメント内の場所を使用できる場合。
IEでは、window.event
ディレクティブを使用せずに他のブラウザで'use strict'
でイベントオブジェクトを取得できますが、arguments.callee.caller.arguments[0]
で取得できます。
function myFunc(p1, p2, p3) {
var evt = window.event || arguments.callee.caller.arguments[0];
}
次のようなイベントハンドラー宣言を記述します。
<a href="#" onclick="myFunc(event,1,2,3)">click</a>
次に、「myFunc()」関数がイベントにアクセスできます。
「onclick」属性の文字列値は、ブラウザで(内部的に)Functionコンストラクターを呼び出すのとほぼ同じ方法で関数に変換されます。
theAnchor.onclick = new Function("event", theOnclickString);
(IEを除く)。ただし、「イベント」はIEのグローバル(ウィンドウ属性)であるため、どのブラウザーでもそのように関数に渡すことができます。
マークアップでイベントハンドラーを呼び出す場合、現在実行しているように、(x-browser)はできません。ただし、クリックイベントをjqueryにバインドすると、次のようになります。
マークアップ:
<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);
}
}
イベントob以来