定义JavaScript事件对象

定义JavaScript事件对象,javascript,Javascript,为什么这段代码会出错 function catchevent() { eventSrcID=(event.srcElement)?event.srcElement.id:'undefined'; eventtype=event.type; status=eventSrcID+' has received a '+eventtype+' event.'; } Firefox表示未定义事件。事实上,这是复制自,它清楚地说,这是IE5。我在Ubuntu上使用Firefo

为什么这段代码会出错

function catchevent() 
{
    eventSrcID=(event.srcElement)?event.srcElement.id:'undefined';

    eventtype=event.type;

    status=eventSrcID+' has received a '+eventtype+' event.';
}
Firefox表示未定义
事件。事实上,这是复制自,它清楚地说,这是IE5。我在Ubuntu上使用Firefox 3.6.13

我的问题不是为什么它不能在我的浏览器上工作。相反,是否有一种方法可以定义链接中建议的适用于我的浏览器的
事件
对象

更新

为什么这不起作用

<html>
<head>
<script>
function catchevent( e ) {
      // reference the proper event object
    var e = e || window.event;

      // reference the proper target
    var srcElem = e.target || e.srcElement; //line no 9

      // get the id of the target
    var eventSrcID = srcElem.id;

    alert(eventSrcID);
}
</script>
</head>
<body>
    <a id="link1" href="#" onclick="catchevent()">link1</a>
    <a id="link2" href="#" onclick="catchevent()">link2</a>
    <a id="link3" href="#" onclick="catchevent()">link3</a>

</body>
</html>

现在,我需要如何在
catchevent()
上传递
event
对象,还是有错误?请建议。

您忘记在参数中传递事件

function catchevent(event) 
{
    eventSrcID=(event.srcElement)?event.srcElement.id:'undefined';

    eventtype=event.type;

    status=eventSrcID+' has received a '+eventtype+' event.';
}

在Firefox和其他兼容W3C的浏览器中,handler函数将接收一个事件对象作为函数的参数

IE使用全局
事件
对象

这是一个跨浏览器的代码解决方案

function catchevent( e ) {
      // reference the proper event object
    var e = e || window.event;

      // reference the proper target
    var srcElem = e.target || e.srcElement;

      // get the id of the target
    var eventSrcID = srcElem.id;

      // get the event type
    var eventtype = e.type;

      // create the status string
    var status = eventSrcID + ' has received a ' + eventtype + ' event.';
}
您会注意到我在创建变量时使用了
var
关键字。您应该这样做,否则您将创建全局变量


还要注意,关键字
this
将引用处理程序分配到的元素。

在Firefox中,传递给处理程序的第一个参数是事件。因此,一段跨浏览器代码将检查参数并在存在时使用它。如果不存在,则默认为window.event,即IE方式。

事件对象是internet explorer中的全局变量。(实际上是全局窗口变量的属性)

Firefox只是一种不同的设计,事件在Firefox中不是一个全局变量。相反,它被传递到函数中(因此您需要更改catchEvent()以接受参数:

function catchEvent(event){
请看这篇文章,因为这不是事件模型面临的唯一问题:


我可能建议使用一本指南,不太关注支持历史上糟糕标准的古老浏览器。这可能是不可能的。例如,
document.getElementById('foo')).click=catchevent;
-是否通过将取决于浏览器,这取决于您所在的浏览器。我想您是对的,但我假设FF是因为experimentX说他在Ubuntu上使用了Firefox 3.6.13。不管怎样,每个人都很有帮助,您能看看我更新的代码吗?请+1这是正确的答案。有关更多信息,s我试过你的代码,我得到了一些错误。请你看看updates@experimentX:这是因为您正在使用内联
onclick
。由于W3C浏览器没有全局事件对象,您需要确保它被传递。请尝试将内联处理程序更改为:
onclick=“catchevent.call(This,event)”
我还没有在所有浏览器上测试过这个功能,但我认为它应该可以工作。
function catchEvent(event){