定义JavaScript事件对象

时间:2011-02-20 04:23:31

标签: javascript

为什么我这段代码出错?:

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

    eventtype=event.type;

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

Firefox说没有定义event。实际上,这是从here复制的,它清楚地表明它适用于IE5。我在Ubuntu上使用Firefox 3.6.13。

我的问题不是它在我的浏览器上不起作用的原因。相反,有没有办法定义event对象,如链接所示,对我的浏览器有效?

更新

为什么这不起作用

<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>

为此,我仍然在9号线上出现错误

e is undefined
[Break On This Error] var srcElem = e.target || e.srcElement; 

现在我如何在event上传递catchevent()对象或者是否有错误?请建议。

4 个答案:

答案 0 :(得分:9)

在Firefox和其他符合W3C标准的浏览器中,处理函数将接收一个事件对象作为函数的参数。

IE使用全局event对象。

这是针对您的代码的跨浏览器解决方案。

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将是对分配处理程序的元素的引用。

答案 1 :(得分:4)

你忘了在参数中传递事件。

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

    eventtype=event.type;

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

function catchEvent(event){

看看这个artice,因为这不是你将面对事件模型的唯一问题:

http://www.quirksmode.org/js/introevents.html Quirksmode article