Internet Explorer 11问题:addEventListener不起作用

问题描述 投票:0回答:1

我正在尝试在元素列表上添加鼠标的侦听器事件。该代码适用于chrome,但不适用于IE

document.getElementsByClassName('select2-result-selectable').forEach(function(item){
  item.addEventListener('mousedown', function(e) { console.log( "User clicked on 'foo.'" ); 
  e.preventDefault();}); 
})

此功能适用于chrome,但不适用于IE 11。

我也尝试了以下代码。

document.getElementsByClassName('select2-result-selectable').forEach(function(item){
    if (item.addEventListener){
        item.addEventListener('mousedown',function(e){ console.log(e); e.preventDefault(); 
        console.log( "User clicked on 'foo.'" );}) 
      } else if (item.attachEvent){
        item.attachEvent('mousedown',function(e){ console.log(e); e.preventDefault(); 
        console.log( "User clicked on 'foo.'" );})
      }
    })

但这又是徒劳的,它适用于chrome,但不适用于IE。有什么建议吗?

javascript jquery internet-explorer backbone.js
1个回答
1
投票

我怀疑您会发现它不是addEventListener,而是forEachgetElementsByClassName不是数组的返回值,它是HTMLCollection。规范不需要HTMLCollection具有forEach(Chrome将其添加为扩展名)。

因此使用forEach,您会这样做:

Array.prototype.forEach.call(document.getElementsByClassName('select2-result-selectable', function(item) {
    // ...
});
© www.soinside.com 2019 - 2024. All rights reserved.