IE7:调用未定义document.attachEvent函数
我试图调用.call
IE7中的document.attachEvent
功能原型方法。但它显示为未定义。 我也查了typeof document.attachEvent
,应该显示为function
,但它是object
。 有人可以解释它为什么?IE7:调用未定义document.attachEvent函数
document.attachEvent.call(this, 'onclick', function() {});
收到此错误
Error: Object doesn't support this property or method
主机提供的功能不要求是正确的JavaScript函数,只要它们可以被调用。这意味着它们不需要继承Function.prototype
(因此可能没有call
或apply
,它们来自Function.prototype
),并且typeof
可能不会将它们标识为函数(因为从JavaScript的角度来看,它们是可调用的,它们是不是功能)。
并非所有过时的浏览器都具有功能正常的功能,包括IE7。
哦,我不知道。 info – Li357
@AndrewLi:不用担心。主机提供的*对象*也可能很奇怪。 :-)但现在,现代浏览器大多提供真正的功能,至少*主要是真实的对象。 –
为什么在调用'attachEvent'时需要设置一个特定的'this'?感觉像X/Y问题。我已经回答Y(“attachEvent”怎么回事?),但我怀疑你真的需要X的答案,这让你想要做这件事... –
嗨,@TJCrowder,我加了太多所以不要让复制代码重复两次,一次使用'document.addEventListener',另一次使用'document.attachEvent'。因此,只需为这些函数分配一个局部变量,然后使用'.call'添加事件。无论如何,我会找到另一种方法 –
我会使用一个包装器方法来标准化东西,像[这个版本的'hookEvent'](http://stackoverflow.com/questions/23799296/js-li-tag-onclick-not (在ie8/23799448#23799448上),它处理与'attachEvent'有关的各种问题(比如''on''部分,事实上过时的浏览器上的事件对象没有'preventDefault'或' stopPropagation' [虽然他们有这个功能,只是不是标准的API],等等。) –