检查JS中的对象是否为事件

3

我有一个函数,可能会被显式调用,也可能会在事件触发时被调用。如果它是由事件触发的,我需要忽略一个可能具有有用值的函数参数。

是否有一种可靠的、跨浏览器的方法可以检查一个对象是否是事件?

我们一直在使用这个方法,但意识到它在IE7中不起作用,因为Event未定义:

var view = {
    save: function (data) {
        if (data.constructor === Event.constructor) {
            // It's an event.
        }
    }
};
1个回答

2

我想,"穷人的"方法可能只是检查所有 Event 对象是否存在某个特定方法,而不管它们是如何创建的:

if (!(typeof data.altKey == "undefined")) {
  // it's an Event
}

编辑

由于某些版本的IE不接受preventDefault,因此我已更改解决方案以使用不同的属性,实际上任何常见属性都应该可以正常工作。


在早期版本的IE中,preventDefault未定义。 - danronmoon
如果你支持那些版本的IE,那么你就是在支持不受支持的软件。IE 6+支持preventDefault(甚至Microsoft也不再支持它)。抱歉,但是那个-1评分有点过于苛刻了。 - Jordan Kasper
IE9是最早支持preventDefault的版本。 - danronmoon
好的,我的错,但是同样的想法可以用不同的属性来实现。我会更新的。 - Jordan Kasper
1
只要 OP 没有在非事件中定义相同的属性,那就没问题。 - danronmoon
鉴于最近的编辑,这似乎是唯一的方法。 - danronmoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接