当前位置: 首页 > 面试题库 >

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

慕承恩
2023-03-14
问题内容

我正在使用Under JS,但li onclick在IE8浏览器上无法使用。

jsfiddle链接:

http://jsfiddle.net/sudheera/DUZ3B/14/

HTML

<div class="primaryNav fl">
<ul id="hd_vertical" class="productNav">

<li id="hd_test" class="flight">
<span class="navIcon flightIcon hd_test">Test</span>
<a class="hd_test" href="http://validator.w3.org/">Flights</a>
</li>

<li id="hd_test1" class="bus">
<span class="navIcon busIcon hd_test1">Test</span>
<a class="hd_test1" href="http://www.w3schools.com/">Buses</a>
</li>

</ul>
</div>

JS

var changeLocation = function(id) {
  var _url = document.getElementsByClassName(id)[1].getAttribute('href');
  location.href = _url;   
}

document.getElementById("hd_vertical").addEventListener("click",function(e) {
        if(e.target.nodeName == "LI") { 
            var _anchor = e.target.id;
            changeLocation(_anchor);
        } else if(e.target.nodeName == "SPAN") {
            var span = e.target;
            var li = span.parentNode;
            var _anchor = li.id;   
            changeLocation(_anchor);
    }
});

请建议


问题答案:

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) {
    // ...
});

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

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

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

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

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

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


 类似资料:
  • 我有一种字体在IE8和IE9以及所有其他浏览器中都能正常工作,但第二种字体只在IE9和其他浏览器中工作。在IE8中,我得到了一个错误: “CSS3111:@font-face遇到未知错误。” 我一直在四处看书,尝试了很多事情,但都没有运气。 我的代码是: 我试过用几个不同的生成器多次重新生成eot,玩过CSS,玩过头,玩过域,等等,但是看起来它们都很好。如前所述,相同的代码在相同的,只是指向不同的

  • 问题内容: 我已经动态创建了一个复选框。我曾经在单击复选框时调用过一个函数,该函数在Google Chrome和Firefox中有效,但 在Internet Explorer 8中不起作用 。这是我的代码: 是我的事件处理程序。 问题答案: 尝试: 更新: 对于IE9之前的InternetExplorer版本,应使用attachEvent方法将指定的侦听器注册到调用它的EventTarget上,对

  • 为什么onclick不起作用?但是,当我在不同的脚本标记中定义函数时,它是有效的。

  • 问题内容: 我尝试阅读有关如何处理IE中自定义字体的多篇文章,但是它们似乎对我没有用。我尝试将字体转换为,但这似乎也不起作用。我不确定自己在做什么错,所以我将发布我的代码 问题答案: 这在ie8 / 9中有效

  • 问题内容: 以下功能在Opera,Firefox和Chrome上正常运行。但是,在IE8中它部分失败。 有人知道为什么吗?有没有明显的错误? 问题答案: IE9之前的IE版本没有的功能,以定义确切的规范版本,请在尝试使用它之前运行此功能: 这是MDN的版本,在Firefox/SpiderMonkey中使用。在其他情况下,例如IE,它会在丢失的情况下添加……基本上是IE8或以下版本。

  • 问题内容: 我使用CSS来表示jQuery向下滑动部分的触发文本:即,当您将鼠标悬停在触发文本上时,光标将变为指针,并且触发文本的不透明度降低,以指示该文本具有单击动作。 这在Firefox和Chrome中可以正常工作,但在IE8中,不透明度不会改变。 我尝试了各种CSS设置,但均未成功。 例如 HTML: CSS: 是什么阻止IE更改不透明度?注意:我已经在各种不同的元素上进行了尝试,围绕CSS