我需要将事件对象和事件源对象传递给处理函数。我相信我了解外部 javascript 的工作原理:
<input id="input2"/>
<script>
function getKey2(e) { alert(this.id+e.keyCode); }
document.getElementById("input2").onkeypress = getKey2;
</script>
onkeypress 方法是在 input2 DOM 上定义的,所以this指向它,并且事件对象作为第一个参数传递给函数。但我对内联 javascript感到困惑:
<input id="input1" onkeypress="getKey1(this,event)"/>
<script>
function getKey1(obj,e) {
alert(obj.id+e.keyCode);
}
</script>
第一个参数this应该是Window对象,但是当它被复制到事件上的obj时,它是事件源对象,来自 DOM的input1 。第二个参数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