了解window.event属性及其用法

时间:2011-08-03 13:11:10

标签: javascript dom event-handling

我不明白window.event或window.event.srcElement背后的动机。在什么情况下应该使用它?它究竟在DOM中代表什么?

4 个答案:

答案 0 :(得分:18)

这里有关于event对象的w3school says

  

事件是JavaScript和事件可以检测到的操作   object提供有关已发生事件的信息。

     

有时我们希望在事件发生时执行JavaScript,例如   当用户点击按钮时。

您可以使用以下方式处理事件:

node.onclick = function(e) {
  // here you can handle event. e is an object.
  // It has some usefull properties like target. e.target refers to node
}

但Internet Explorer不会将事件传递给处理程序。相反,您可以使用在事件触发后立即更新的window.event对象。所以crossbrowser处理事件的方式:

node.onclick = function(e) {
  e = e || window.event;
  // also there is no e.target property in IE.
  // instead IE uses window.event.srcElement
  var target = e.target || e.srcElement;
  // Now target refers to node. And you can, for example, modify node:
  target.style.backgroundColor = '#f00';
}

答案 1 :(得分:6)

不确定在较新的浏览器版本中是否已更改此差异,但基本上,“在Microsoft事件访问模型中,有一个特殊的属性window.event,其中包含发生的最后一个事件。” (来自参考资料)

因此,要编写跨浏览器兼容的事件处理程序,您需要执行以下操作:

function doSomething(e) {
    if(!e) {
        var e = window.event;
    }
    var ele = e.target || e.srcElement;
    // get the clicked element
    // srcElement for IE, target for others
}
element.onclick = doSomething;

参考: http://www.quirksmode.org/js/events_access.html

答案 2 :(得分:0)

function IndentifyMe(){
 alert("You clicked on " + window.event.srcElement.tagName);
}

<body onclick = "IndentifyMe()">

尝试此代码,在body标签中包含大量元素,然后尝试单击不同的元素

答案 3 :(得分:0)

活动是用户互动的命脉。没有事件,你 无法与页面交互。

事件处理程序用于在发生特定操作时调用某些JavaScript。如果你想要一些 当用户将光标移动到元素上时触发的行为,您使用onmouseover 事件处理程序。

“DOM脚本:使用JavaScript进行网页设计和文档对象模型:第二版”