我有这个脚本:
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未定义
我错了什么?
答案 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”中得到了事件