无法在 IE8 中获取 属性 'parentNode' 的未定义或空引用
Unable to get property 'parentNode' of undefined or null reference in IE8
我实现了一个具有打开和关闭功能的自定义下拉菜单。使用冒泡开发的关闭功能在 IE9、IE10、IE11 等中运行良好,但我在 IE8 中收到错误消息,我不知道如何修复它。
错误消息是 Unable to get property 'parentNode' of undefined or null reference
并显示 close_handler
函数中的行 elem = elem.parentNode;
。
我的错误在哪里,我该如何解决?
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();
}
}
}
IE8 不支持event.target
。你必须使用 event.srcElement
:
var elem = event.target || event.srcElement;
我实现了一个具有打开和关闭功能的自定义下拉菜单。使用冒泡开发的关闭功能在 IE9、IE10、IE11 等中运行良好,但我在 IE8 中收到错误消息,我不知道如何修复它。
错误消息是 Unable to get property 'parentNode' of undefined or null reference
并显示 close_handler
函数中的行 elem = elem.parentNode;
。
我的错误在哪里,我该如何解决?
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();
}
}
}
IE8 不支持event.target
。你必须使用 event.srcElement
:
var elem = event.target || event.srcElement;