Bob Napkin
Bob Napkin

Reputation: 566

Unable to get property 'parentNode' of undefined or null reference in IE8

I implemented a custom dropdown which has open and close functions. Close function developed using bubbling and works great in IE9, IE10, IE11 etc, but I've got an error message in IE8 and I don't know how I can fix it. Error message is Unable to get property 'parentNode' of undefined or null reference and show me line elem = elem.parentNode; in close_handler function. Where is my mistake, how I can fix it?

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();
        }

    }

}

Upvotes: 1

Views: 2868

Answers (1)

Felix Kling
Felix Kling

Reputation: 816394

IE8 does not support event.target. You have to use event.srcElement:

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

Upvotes: 2

Related Questions