攻击偶数时,对象不支持 ie8 中的 属性 或方法 'attachEvent'

Object doesn't support property or method 'attachEvent' in ie8 when attackhing an even

我仍然需要一个普通的 JavaScript 解决方案来在 Internet Explorer 8 中附加一个事件处理程序。当我执行下面的代码时,我在 ie8 中收到一个错误消息 Object doesn't support property or method 'attachEvent'。我该如何解决这个问题。

if ('addEventListener' in document) {
    document.addEventListener('DOMContentLoaded', function () {
        [].forEach.call(document.querySelectorAll('input'), function (el) {
            el.addEventListener('click', function (e) {
                e.preventDefault();
                alert('nope');
            }, false);
        });
    })
}
else
{
    var d = document.getElementsByTagName('input');
    d.attachEvent('onclick', function () {
        alert('no');
    });
}

getElementsByTagName returns 元素的 集合 ,而不是单个元素。该集合没有 attachEvent。个别元素(在较旧的 IE 上)。


另请注意:

  • 您的 IE 特定分支不会像您的标准分支那样等待完整的 DOM 被解析。要么两者都应该,要么两者都不应该,但不能混合使用。最佳做法是不要使用 DOMContentLoaded,而只是将脚本放在 HTML 的末尾,紧接在 </body> 结束标记之前。

  • 您的 IE 事件处理程序没有阻止默认操作,而您的标准是。

如果你想要一个跨浏览器的事件附加功能,here's one in another answer on SO