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);"