Firefox“window.event未定义”错误

时间:2013-06-25 11:17:57

标签: javascript events firefox

我有这个脚本:

function postBackByObject(e) {
   var o = window.event.srcElement || e.target;
   if (o.tagName == "INPUT" && o.type == "checkbox") {
        __doPostBack("", "");
    }
}

我将此脚本与onclick="postBackByObject();"一起使用。

但在Firefox 21中我收到此错误:

  

TypeError:window.event未定义

我错了什么?

7 个答案:

答案 0 :(得分:15)

那是因为它是。 window.event适用于旧版本的IE。

执行此操作的典型方法是:

function postBackByObject(e) {
    e = e || window.event;
    var o = e.srcElement || e.target;
    // ...
}

答案 1 :(得分:7)

您正在附加内联onclick="postBackByObject();"

的事件

尝试将this(事件目标)传递给onclick="postBackByObject(this);" 修改您的函数以处理此更改:

function postBackByObject(e) {
   if (e.tagName == "INPUT" && e.type == "checkbox") {
        __doPostBack("", "");
    }
}

更好的选择是使用addEventListener

附加活动

如果您的标记如下:

<div id="TvCategories" onclick="postBackByObject(this);" />

然后

document.getElementById('TvCategories').addEventListener('click', postBackByObject);

使用此方法时,postBackByObject功能保持不变。

答案 2 :(得分:3)

将事件传递给onClick事件,如下所示:

onclick="myCustomFunction(event);"

它确实有效,您可以访问事件对象!

答案 3 :(得分:2)

可以在内联声明中传递事件对象:

<input type="button" onclick="postBackByObject(event);" value="click" />

function postBackByObject(e) {
    var o = e.srcElement || e.target;
    // ...
}

答案 4 :(得分:2)

附加活动是一个解决方案,但是经过长时间的搜索,我发现了另一个可能对其他人面临同样问题的帮助:

  

如果您明确发送&#39;事件&#39;事件对象仅由firefox重新调整。来自功能

因此问题出现是因为Firefox无法识别window.event,解决方案是将event传递给函数,您的代码将是:

function postBackByObject(e) {
   var o = e.srcElement || e.target;
   if (o.tagName === "INPUT" && o.type === "checkbox") {
        __doPostBack("", "");
    }
}

您仍然可以在内联HTML中将其作为参数传递event

onclick="postBackByObject(event);"

答案 5 :(得分:1)

你的行

var o = window.event.srcElement || e.target;

在除IE之外的所有浏览器上都失败,因为对于他们windows.event未定义

适当的表述是:

var o = e ? e.target : window.event.srcElement;

由于符合标准的浏览器会将事件作为参数e传递 IE中e.target的目标,e将是未定义的,您必须使用 window.event.srcElement

请注意,最新版本的IE确实支持符合标准的模型。

在更通用的说明中,当您尝试访问a.b.c.d的值时,a.b.c必须 是一个已定义的对象,否则您将收到错误a.b.c undefined

答案 6 :(得分:0)

我不确定所有浏览器是否支持window.event。我认为你在 postBackByObject(e)的变量“e”中得到了事件