定义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){