document.getElementById('container').addEventListener('copy',beforecopy,false );
在Chrome / Safari中,当页面上的内容被复制时,上面的程序会运行"beforecopy“功能。MSIE也应该支持这个功能,但是由于某种原因,我得到了这个错误:
“对象不支持此属性或方法”
现在,我的理解是Internet Explorer不会处理body节点,但我认为按ID提供节点会很好。有谁知道我做错了什么吗?提前谢谢。
**任何人都可以告诉我第三个参数"False“有什么好处。
发布于 2009-11-08 12:40:34
在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。
发布于 2014-08-19 23:05:19
如果您使用的是JQuery 2.x,请在
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge;" />
</head>
<body>
...
</body>
</html>
这对我很有效。
发布于 2009-11-08 12:45:32
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、Prototype等),并避免必须自己创建修复程序。
顺便说一下,W3C事件模型中的第三个参数与difference between bubbling and capturing events有关。在几乎每种情况下,您都希望在事件冒泡时处理事件,而不是在捕获事件时进行处理。当在文本框的“焦点”事件上使用event delegation时,它很有用,因为文本框不会冒泡。
https://stackoverflow.com/questions/1695376
复制相似问题