MSIE和addEventListener在Javascript中的问题?

document.getElementById('container').addEventListener('copy',beforecopy,false ); 

在Chrome / Safari中,上述内容将在复制页面上的内容时运行“beforecopy”函数。 MSIE也应该支持这个function,但由于某种原因我得到这个错误:

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

现在,我的理解是,Internet Explorer不会与身体节点一起玩,但是我认为通过ID提供一个节点可以正常工作。 有没有人有任何想法我做错了什么? 提前致谢。

**任何人谁可以告诉我什么第三个参数“假”是有益的奖金积分。

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

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

 if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); } 

你可以做一个function来做到这一点:

 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'); }); 

你可以在这里运行上面的代码的例子。

addEventListener的第三个参数是useCapture ; 如果为真,则表示用户希望启动事件捕获 。

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

 <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge;" /> </head> <body> ... </body> </html> 

这对我有效。

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); } 

虽然我build议避免编写自己的事件处理包装,而是使用JavaScript框架(如jQuery , Dojo , MooTools , YUI , Prototype等),并避免自己创build修复。

顺便说一下,W3C事件模型中的第三个参数与冒泡和捕获事件之间的差异有关 。 在几乎所有的情况下,你都会想要处理事件,而不是当它们被捕获时。 对于文本框中的“焦点”事件使用事件委派 ,这是非常有用的,它不会冒泡。

尝试添加

 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 

打开头标后

从IE11开始,你需要使用addEventListenerattachEvent已被弃用,并引发错误。

正如PPK指出的那样,在IE中你也可以使用

 e.cancelBubble = true; 

使用<meta http-equiv="X-UA-Compatible" content="IE=9"> ,IE9 +通过删除事件名称中的“on”来支持addEventListener ,如下所示:

  var btn1 = document.getElementById('btn1'); btn1.addEventListener('mousedown', function() { console.log('mousedown'); }); 

问题是IE没有标准的addEventListener方法。 IE使用自己的attachEvent ,几乎相同。

好的解释的差异,也关于第三个参数可以在quirksmodefind。