为什么我这段代码出错?:
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()
对象或者是否有错误?请建议。
答案 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