document.getElementById('container').addEventListener('copy',beforecopy,false );
在Chrome / Safari中,当复制页面上的内容时,上面将运行“beforecopy”功能。 MSIE也应该支持这个功能,但出于某种原因我收到了这个错误:
“对象不支持此属性或方法”
现在,我的理解是Internet Explorer不会使用body节点,但我认为通过ID提供节点可以正常工作。有没有人对我做错了什么有任何想法?提前谢谢。
**任何可以告诉我第三个参数“False”有用的人的奖励积分。
答案 0 :(得分:181)
在IE中,您必须使用attachEvent
而不是标准addEventListener
。
通常的做法是检查addEventListener
方法是否可用并使用它,否则使用attachEvent
:
if (el.addEventListener){
el.addEventListener('click', modifyText, false);
} else if (el.attachEvent){
el.attachEvent('onclick', modifyText);
}
你可以做一个功能:
function bindEvent(el, eventName, eventHandler) {
if (el.addEventListener){
el.addEventListener(eventName, eventHandler, false);
} else if (el.attachEvent){
el.attachEvent('on'+eventName, eventHandler);
}
}
// ...
bindEvent(document.getElementById('myElement'), 'click', function () {
alert('element clicked');
});
您可以运行上述代码here的示例。
addEventListener
的第三个参数是useCapture
;如果为true,则表示用户希望启动event capturing。
答案 1 :(得分:28)
如果您使用的是JQuery 2.x,请在
中添加以下内容<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge;" />
</head>
<body>
...
</body>
</html>
这对我有用。
答案 2 :(得分:4)
Internet Explorer(IE8及更低版本)不支持addEventListener(...)
。它使用attachEvent
方法拥有自己的事件模型。你可以使用这样的代码:
var element = document.getElementById('container');
if (document.addEventListener){
element .addEventListener('copy', beforeCopy, false);
} else if (el.attachEvent){
element .attachEvent('oncopy', beforeCopy);
}
虽然我建议避免编写自己的事件处理包装,而是使用JavaScript框架(例如jQuery,Dojo,MooTools,YUI,{{3}等等,并避免必须自己创建此修复程序。
顺便说一句,W3C事件模型中的第三个参数与Prototype有关。几乎在每种情况下,你都会想要在泡沫时处理事件,而不是在它们被捕获时处理。当对文本框的“焦点”事件使用difference between bubbling and capturing events时,它非常有用,它不会冒泡。
答案 3 :(得分:4)
尝试添加
<meta http-equiv="X-UA-Compatible" content="IE=edge">
在开头标记
之后答案 4 :(得分:1)
从IE11开始,您需要使用addEventListener
。不推荐使用attachEvent
并抛出错误。
答案 5 :(得分:0)
问题是IE没有标准的addEventListener
方法。 IE使用自己的attachEvent
,它几乎一样。
可以找到差异的良好解释,以及第3个参数at quirksmode。
答案 6 :(得分:0)
正如PPK指出here,在IE中你也可以使用
e.cancelBubble = true;
答案 7 :(得分:0)
使用<meta http-equiv="X-UA-Compatible" content="IE=9">
,IE9 +支持addEventListener
,删除事件名称中的“on”,如下所示:
var btn1 = document.getElementById('btn1');
btn1.addEventListener('mousedown', function() {
console.log('mousedown');
});