首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript中的MSIE和addEventListener问题?

Javascript中的MSIE和addEventListener问题?
EN

Stack Overflow用户
提问于 2009-11-08 12:35:21
回答 8查看 134.9K关注 0票数 85
代码语言:javascript
复制
document.getElementById('container').addEventListener('copy',beforecopy,false );

在Chrome / Safari中,当页面上的内容被复制时,上面的程序会运行"beforecopy“功能。MSIE也应该支持这个功能,但是由于某种原因,我得到了这个错误:

“对象不支持此属性或方法”

现在,我的理解是Internet Explorer不会处理body节点,但我认为按ID提供节点会很好。有谁知道我做错了什么吗?提前谢谢。

**任何人都可以告诉我第三个参数"False“有什么好处。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-11-08 12:40:34

在IE中,你必须使用attachEvent而不是标准的addEventListener

一种常见的做法是检查addEventListener方法是否可用并使用它,否则使用attachEvent

代码语言:javascript
复制
if (el.addEventListener){
  el.addEventListener('click', modifyText, false); 
} else if (el.attachEvent){
  el.attachEvent('onclick', modifyText);
}

您可以创建一个函数来执行此操作:

代码语言:javascript
复制
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

票数 186
EN

Stack Overflow用户

发布于 2014-08-19 23:05:19

如果您使用的是JQuery 2.x,请在

代码语言:javascript
复制
<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge;" />
   </head>
   <body>
    ...
   </body>
</html>

这对我很有效。

票数 32
EN

Stack Overflow用户

发布于 2009-11-08 12:45:32

Internet Explorer (IE8及更低版本)不支持addEventListener(...)。它使用attachEvent方法拥有自己的事件模型。您可以使用如下代码:

代码语言:javascript
复制
var element = document.getElementById('container');
if (document.addEventListener){
    element .addEventListener('copy', beforeCopy, false); 
} else if (el.attachEvent){
    element .attachEvent('oncopy', beforeCopy);
}

尽管我建议避免编写自己的事件处理包装器,而是使用JavaScript框架(如jQueryDojoMooToolsYUIPrototype等),并避免必须自己创建修复程序。

顺便说一下,W3C事件模型中的第三个参数与difference between bubbling and capturing events有关。在几乎每种情况下,您都希望在事件冒泡时处理事件,而不是在捕获事件时进行处理。当在文本框的“焦点”事件上使用event delegation时,它很有用,因为文本框不会冒泡。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1695376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档