1

引数eは、アンカー要素に埋め込まれたスクリプトから呼び出された場合は未定義になります。

function testOverrideClick(e) {
    console.log(e);
    e.preventDefault();          
}

....

<body onload="afterLoad();">
<a id="testAnchor" href="http://www.google.com" onclick="testOverrideClick()">test link</a>

ただし、スクリプトからイベントハンドラーを登録すると、eは有効になります。

function afterLoad() {
      document.getElementById("testAnchor").onclick = testOverrideClick;
}

...

<a id="testAnchor" href="http://www.google.com">test link</a>

何が起こっていますか?

4

2 に答える 2

2

event関数に識別子を渡します。

<a id="..." href="..." onclick="testOverrideClick(event)">test link</a>

これは、W3準拠のブラウザで割り当てられた関数が次のようになるために機能します。

elem.onclick = function(event) {
    testOverrideClick(event);
}

したがって、イベントパラメータが渡されます。


また、古いIEでは、次のようになります。

elem.onclick = function() {
    testOverrideClick(event);
}

したがって、グローバルwindow.eventは渡されます。

于 2013-03-16T18:54:41.360 に答える
1

何が起こっていますか?

ここでは、javascript関数に何も渡していない:

onclick="testOverrideClick()"

eしたがって、渡されない引数にアクセスしようとすると、関数がクラッシュします。

心配しないでください。2番目のコードスニペットが正しい方法です。目立たず、JavaScriptとHTMLを混在させる必要はありません。

于 2013-03-16T18:52:05.747 に答える