我仍然需要一个vanilla 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');
});
}
答案 0 :(得分:2)
getElementsByTagName
会返回元素的集合,而不是单个元素。该集合没有attachEvent
。个别元素(在较旧的IE上)。
另请注意:
您的IE特定分支并不等待您的标准分支解析完整的DOM。两者都应该,或两者都不应该,但不是混合。最佳做法是不要使用DOMContentLoaded
,只需将脚本放在HTML的末尾,紧接在结束</body>
标记之前。
您的IE事件处理程序不会阻止默认操作,而您的标准是。
如果您想要一个跨浏览器事件附加功能,here's one in another answer on SO。