13

我有这个脚本:

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

我将此脚本与onclick="postBackByObject();".

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

类型错误:window.event 未定义

我怎么了?

4

7 回答 7

15

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

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

function postBackByObject(e) {
    e = e || window.event;
    var o = e.srcElement || e.target;
    // ...
}
于 2013-06-25T11:21:42.227 回答
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功能保持不变。

于 2013-06-25T11:41:14.040 回答
3

像这样在事件上传递事件onClick

onclick="myCustomFunction(event);"

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

于 2014-11-15T16:54:32.537 回答
2

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

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

function postBackByObject(e) {
    var o = e.srcElement || e.target;
    // ...
}
于 2014-10-02T11:58:30.070 回答
2

附加事件是一种解决方案,但是经过长时间的搜索,我发现还有一个替代方案可能对面临相同问题的其他人有所帮助:

如果您从函数显式发送“事件”,则事件对象仅由 firefox 重新调整

所以问题发生是因为window.eventFirefox无法识别,解决方案是传递event给函数,您的代码将是:

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

您仍然可以在event作为参数传递的内联 HTML 中调用它:

onclick="postBackByObject(event);"
于 2015-05-12T11:43:33.857 回答
1

你的线路

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

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

正确的表述是:

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

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

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

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

于 2013-06-25T12:23:09.813 回答
0

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

于 2013-06-25T11:23:35.107 回答