Javascript中的MSIE和addEventListener问题?

Mat*_*rym 84 javascript internet-explorer addeventlistener

document.getElementById('container').addEventListener('copy',beforecopy,false );
Run Code Online (Sandbox Code Playgroud)

在Chrome/Safari中,当复制页面上的内容时,上面将运行"beforecopy"功能.MSIE也应该支持这个功能,但出于某种原因我收到了这个错误:

"对象不支持此属性或方法"

现在,我的理解是Internet Explorer不会使用body节点,但我认为通过ID提供节点可以正常工作.有没有人对我做错了什么有任何想法?提前致谢.

**任何能告诉我第三个参数"False"有用的人的奖励积分.

CMS*_*CMS 185

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

通常的做法是检查addEventListener方法是否可用并使用它,否则使用attachEvent:

if (el.addEventListener){
  el.addEventListener('click', modifyText, false); 
} else if (el.attachEvent){
  el.attachEvent('onclick', modifyText);
}
Run Code Online (Sandbox Code Playgroud)

你可以做一个功能:

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');
});
Run Code Online (Sandbox Code Playgroud)

您可以在此处运行上述代码的示例.

第三个论点addEventListeneruseCapture; 如果为true,则表示用户希望启动事件捕获.

  • 你刚刚救了我的理智,CMS.谢谢谢谢! (2认同)

小智 31

如果您使用的是JQuery 2.x,请在中添加以下内容

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge;" />
   </head>
   <body>
    ...
   </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这对我有用.

  • 对于那些运行IE版本<= 8的人来说,这不会解决问题. (3认同)

Dan*_*ert 5

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);
}
Run Code Online (Sandbox Code Playgroud)

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

顺便说一下,事件的W3C模型中的第三个参数与冒泡事件和捕获事件之间区别有关。在几乎每种情况下,您都希望在事件冒泡时进行处理,而不是在捕获事件时进行处理。当对诸如“焦点”事件之类的文本框使用事件委派时,它很有用,不会冒泡。


130*_*3r5 5

尝试添加

<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
Run Code Online (Sandbox Code Playgroud)

在打开头标签之后

  • 对于运行IE版本&lt;= 8的用户,这将无法解决问题。 (2认同)