栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript JS li标签onclick在IE8上不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

  1. 它不能保证处理程序的运行

    attachEvent
    顺序(它们的执行顺序与之相反
    addEventListener

  2. 它不处理

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407912.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号