Reputation: 566
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
Reputation: 816394
IE8 does not support event.target
. You have to use event.srcElement
:
var elem = event.target || event.srcElement;
Upvotes: 2