无法在IE8中获取未定义或空引用的属性“parentNode”

时间:2015-07-28 03:39:37

标签: javascript dom internet-explorer-8

我实现了一个具有开放和关闭功能的自定义下拉列表。使用冒泡开发的关闭功能在IE9,IE10,IE11等中运行良好,但我在IE8中收到错误消息,我不知道如何解决它。 错误消息为Unable to get property 'parentNode' of undefined or null reference,并在elem = elem.parentNode;函数中显示行close_handler。 我的错误在哪里,我如何解决它?

function Dropdown(root, params) {
    var doc = document;

    var dropdown_input = root.querySelector('.dropdown-input');
    var dropdown_arrow = root.querySelector('.dropdown-arrow');
    var dropdown_content = root.querySelector('.dropdown-content');

    add_event(dropdown_input, 'click', open_close, false);
    add_event(dropdown_arrow, 'click', open_close, false);

    add_event(doc, 'keydown', close_handler, false);
    add_event(doc, 'click', close_handler, false);

    var is_open = false;

    function open_close() {
        return is_open ? close() : open();
    }

    function open() {
        remove_class(dropdown_content, 'hidden');
        dropdown_content.scrollTop = 0;
        is_open = true;
    }

    function close() {
        dropdown_content.className += ' hidden';
        is_open = false;
    }

    function close_handler(event) {
        event = event || window.event;

        if (event.keyCode === 27) {
            close();
        }

        if (!event.keyCode) {
            var elem = event.target;

            while (elem !== doc) {
                if (elem && elem.className === 'dropdown') {
                    return;
                }
                elem = elem.parentNode;
            }

            close();
        }

    }

}

1 个答案:

答案 0 :(得分:2)

IE8不支持event.target。您必须使用event.srcElement

var elem = event.target || event.srcElement;