1

イベント ハンドラーをインラインで追加しonclick、要素の属性を次のように使用するとします。

<input type="button" value="Submit" onclick='buttonClick()' />

次に、これは私のハンドラーです:

<script type="text/javascript">
    window.buttonClick=function(e){
        e=e||window.event;
        alert(e.type);
        return false;
    }
</script>

イベントオブジェクトを取得する方法を知りたいですか? 上記のコードはエラーをスローするため: e is undefined.

4

2 に答える 2

2

それはインラインイベントで変数を使用していません。event

この場合は、インライン イベントから呼び出されるbuttonClick関数です。呼び出された関数には、変数への魔法のアクセスはありません(は IE の機能です)。さらに、投稿では、引数が0で呼び出されたため、常に未定義と評価されます。eventwindow.eventbuttonClicke

いずれにせよ、特殊event変数へのアクセスがインラインイベント自体から行われ、イベントオブジェクトが「実際の」イベントハンドラー関数に渡されるため、次のように比較してください。

<input type="button" value="Submit"
       onclick="buttonClick(window.event||event)" />

<script type="text/javascript">
    function buttonClick(e) {
        alert(e.type);
        return false;
    }
</script>

(jQuery または別のライブラリを使用して均一なイベント アクセスを容易にすることをお勧めしますが、それは別の話です..)


window.event||event汚い小さなトリックであることに注意してください:

IE ではwindow.event、イベント オブジェクトに評価され、式の結果として使用されます (そのためevent) は評価されません。IE 以外のブラウザでwindow.eventは、(誰かが本当に悪いことをしていない限り) undefined と評価されるため、結果はevent変数の結果になります。

これを逆にすると、W3C ローカル変数アプローチevent||window.eventをサポートしていないブラウザー (つまり IE) で ReferenceError が発生します。event

于 2012-09-27T05:57:45.453 に答える
0

あなたのコードが私が思っていることをすると仮定すると..あなたは単にこれを行うでしょう:

<input type="button" value="Submit" onclick='buttonClick(window.event||event)' />
于 2012-09-27T05:55:39.350 に答える