click ie8浏览器 不生效_JavaScript JS li标签onclick在IE8上不起作用

小编典典

IE8和更早版本没有addEventListener,但是它们确实有其非标准的前身attachEvent。他们不是 很 一样。

这是一个使用可用功能的“挂钩此事件”功能:

var hookEvent = (function() {

var div;

// The function we use on standard-compliant browsers

function standardHookEvent(element, eventName, handler) {

element.addEventListener(eventName, handler, false);

return element;

}

// The function we use on browsers with the previous Microsoft-specific mechanism

function oldIEHookEvent(element, eventName, handler) {

element.attachEvent("on" + eventName, function(e) {

e = e || window.event;

e.preventDefault = oldIEPreventDefault;

e.stopPropagation = oldIEStopPropagation;

handler.call(element, e);

});

return element;

}

// Polyfill for preventDefault on old IE

function oldIEPreventDefault() {

this.returnValue = false;

}

// Polyfill for stopPropagation on old IE

function oldIEStopPropagation() {

this.cancelBubble = true;

}

// Return the appropriate function; we don't rely on document.body

// here just in case someone wants to use this within the head

div = document.createElement('div');

if (div.addEventListener) {

div = undefined;

return standardHookEvent;

}

if (div.attachEvent) {

div = undefined;

return oldIEHookEvent;

}

throw "Neither modern event mechanism (addEventListener nor attachEvent) is supported by this browser.";

})();

然后,您将在示例中使用它:

hookEvent(document.getElementById("hd_vertical"), "click", function(e) {

// ...

});

请注意,它如何在使用的浏览器上提供事件对象的缺少preventDefault和stopPropagation功能,attachEvent并确保this在处理程序调用中使用的是它addEventListener。

有活动正常化的各个方面,上面的也 没有 做:

它不能保证处理程序的运行attachEvent顺序(它们的执行顺序与之相反addEventListener)

它不处理e.which与vs之e.keyCode类的问题

旁注:正如adeneo在对问题的评论中指出的那样,IE8也不支持getElementsByClassName。但是它确实支持querySelectorAll和querySelector,因此请更改:

var _url = document.getElementsByClassName(id)[1].getAttribute('href');

var _url = document.querySelectorAll("." + id)[1].getAttribute('href');

请注意,这将尝试获取与选择器匹配的第二个元素。[1]是列表中的第二个条目,而不是第一个[0]。如果您要使用querySelector第一个匹配项,则可以使用,它仅返回第一个匹配项:

var _url = document.querySelector("." + id).getAttribute('href');

2020-04-25

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值