web-dev-qa-db-ja.com

jQuery:イベントオブジェクトを引数として渡さずにイベントハンドラー関数で取得する方法

リンクに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です。

何か案が?

66
LazNiko

イベントオブジェクト「evt」はパラメータから渡されないため、このオブジェクトを取得することは可能ですか?

いいえ、信頼できません。 IEおよび他の一部のブラウザはwindow.event$(window.event)ではない)として使用可能にしますが、これは非標準であり、すべてのブラウザでサポートされていません(有名なFirefoxではありません)。

イベントオブジェクトを関数に渡す方が良いでしょう:

<a href="#" onclick="myFunc(event, 1,2,3)">click</a>

IE以外のブラウザでも、event変数を持つコンテキストでコードを実行するため、動作します(eventwindow.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();
});

...またはeventmyFuncに本当に渡したい場合:

$("selector_for_the_anchor").click(function(event) {
    myFunc(event, 1, 2, 3);
});

セレクタは、アンカーを識別するものであれば何でもかまいません。 非常に豊富なセット から選択できます(CSS3のほぼすべてに加えていくつか)。アンカーにidまたはclassを追加できますが、ここでも他の選択肢があります。何か人工的なものを追加するのではなく、ドキュメント内の場所を使用できる場合。

93
T.J. Crowder

IEでは、window.eventディレクティブを使用せずに他のブラウザで'use strict'でイベントオブジェクトを取得できますが、arguments.callee.caller.arguments[0]で取得できます。

function myFunc(p1, p2, p3) {
    var evt = window.event || arguments.callee.caller.arguments[0];
}
14
otakustay

次のようなイベントハンドラー宣言を記述します。

<a href="#" onclick="myFunc(event,1,2,3)">click</a>

次に、「myFunc()」関数がイベントにアクセスできます。

「onclick」属性の文字列値は、ブラウザで(内部的に)Functionコンストラクターを呼び出すのとほぼ同じ方法で関数に変換されます。

theAnchor.onclick = new Function("event", theOnclickString);

(IEを除く)。ただし、「イベント」はIEのグローバル(ウィンドウ属性)であるため、どのブラウザーでもそのように関数に渡すことができます。

3
Pointy

マークアップでイベントハンドラーを呼び出す場合、現在実行しているように、(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以来