Javascript Firefox“;window.event未定义";错误

Javascript Firefox“;window.event未定义";错误,javascript,events,firefox,Javascript,Events,Firefox,我有这个剧本: function postBackByObject(e) { var o = window.event.srcElement || e.target; if (o.tagName == "INPUT" && o.type == "checkbox") { __doPostBack("", ""); } } 我将此脚本与onclick=“postbackyobject();”一起使用 但在Firefox21中,我遇到了以下错误:

我有这个剧本:

function postBackByObject(e) {
   var o = window.event.srcElement || e.target;
   if (o.tagName == "INPUT" && o.type == "checkbox") {
        __doPostBack("", "");
    }
}
我将此脚本与
onclick=“postbackyobject();”
一起使用

但在Firefox21中,我遇到了以下错误:

TypeError:window.event未定义


我怎么了?那是因为我错了<代码>窗口。事件用于旧版本的IE

实现这一点的典型方法是:

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

我不确定是否所有浏览器都支持window.event。我认为您在postBackByObject(e)的变量“e”中获得了事件,您正在内联地附加事件
onclick=“postBackByObject();”

尝试将
this
(事件目标)传递到
onclick=“postbackyobject(this);”
修改您的函数以处理此更改:

function postBackByObject(e) {
   if (e.tagName == "INPUT" && e.type == "checkbox") {
        __doPostBack("", "");
    }
}
更好的选择是使用
addEventListener

如果您的标记看起来像:

<div id="TvCategories" onclick="postBackByObject(this);" />
使用此方法时,
postbackyobject
函数保持不变。

您的行

var o = window.event.srcElement || e.target;
在除IE之外的所有浏览器上都失败,因为它们的
windows.event
未定义

适当的提法是:

var o = e ? e.target : window.event.srcElement;
因为符合标准的浏览器将事件作为参数
e
传递,并且 IE中
e
处的目标将未定义,您必须使用
window.event.src元素

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

更一般地说,当您尝试以
a.b.c.d
的形式访问某个值时,则
a.b.c
必须
必须是已定义的对象,否则将出现错误
a.b.c undefined

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

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

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

函数postBackByObject(e){
var o=e.src元素| | e.target;
// ...
}

onClick
事件上传递事件,如下所示:

onclick=“myCustomFunction(事件);”


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

附加活动是一个解决方案,但有一个替代方案可以帮助其他面临相同问题的人,经过长时间搜索,我发现:

只有当您从函数显式发送“事件”时,firefox才会重新确认事件对象

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

function postBackByObject(e) {
   var o = e.srcElement || e.target;
   if (o.tagName === "INPUT" && o.type === "checkbox") {
        __doPostBack("", "");
    }
}
您仍然可以在内联HTML传递
事件中调用它作为参数:

onclick="postBackByObject(event);"

检查此…@AyyappanSekar,查看注释中的URL,使用
[文本]格式(http://uri.com/)
典型的方式是按位OR?!抱歉,输入错误,应该是合乎逻辑的。@Kolinik您仍然缺少一组括号,这样您就不会在赋值异常
e | |(e=x)中得到无效的左侧,或者交换
=
| |
(但这是一个重新分配,即使它已经被分配)。呃,这就是我没有得到任何睡眠的原因。你说
e未定义是什么意思?您刚刚在函数定义中定义了它…对不起;我应该把
obj.addEventListener('click',postBackByObject')放在哪里?哪个元素存在
onclick='postbackyobject()'
?顺便说一句,第一种方法应该有效:
onclick=“postbackyobject(this);”
第一种方法提到在方法调用中使用
this
<代码>
请从
postBackByObject
中删除第一行。参数e指的是目标对象本身。我已经用新功能更新了我的帖子。这非常有用。因此,命名似乎很重要,因为使用
this
而不是
event
将传递对象而不是事件
onclick="postBackByObject(event);"