3

イベント オブジェクトとイベント オリジン オブジェクトを処理関数に渡す必要があります。外部JavaScriptの仕組みを理解していると思います:

<input id="input2"/>
<script>
function getKey2(e) { alert(this.id+e.keyCode); }
document.getElementById("input2").onkeypress = getKey2;
</script>

onkeypress メソッドは input2 DOM で定義されているため、これはそれを指し、イベント オブジェクトは関数の最初の引数として渡されます。しかし、私はインラインjavascriptと混同しています:

<input id="input1" onkeypress="getKey1(this,event)"/>
<script>
function getKey1(obj,e) {
    alert(obj.id+e.keyCode);
}
</script>

最初の引数thisはWindowオブジェクトである必要がありますが、イベントでobjにコピーされると、DOM からのinput1であるイベント元オブジェクトになります。2 番目の引数eventはグローバル イベント オブジェクトである必要がありますが、呼び出されるとイベント オブジェクトが関数に渡されます。どうやら、私の推測は間違っているようです - 電話はどのように機能しますか?

簡単に言うと、次の文字のオブジェクト値が同じでないのはなぜですか?

              | name   object value
----------------------------------
in onkeypress | this   Window
in getKey1    | obj    DOM input1


              | name   object value
----------------------------------
in onkeypress | event  global event
in getKey1    | e      keypress event

ここでフィドル

4

2 に答える 2

1

いいえ、これはイベントがトリガーされた dom オブジェクトになります。この場合は<input>onkeyup 属性が設定されていて、ブラウザーがハンドラーを見つける場所です。

これらのイベントでもう少し遊んでみます: http://jsfiddle.net/nFfEp/

イベントのトリガーと処理についての理解を深めるために、これは非常に役立つドキュメントです: http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

于 2013-07-02T16:12:50.293 に答える