删除不使用Javascript的事件侦听器
我试图用Javascript删除事件侦听器,但它似乎不起作用 我需要在处理程序中传递对象删除不使用Javascript的事件侦听器,javascript,Javascript,我试图用Javascript删除事件侦听器,但它似乎不起作用 我需要在处理程序中传递对象事件,这就是我使用.bind()的原因 我的代码: if (sidebar) { listItems.forEach(function(listItem) { listItem.showSubmenu = showSubmenu; listItem.addEventListener('click', listItem.showSubmenu.bind(this, subLists), tr
事件
,这就是我使用.bind()
的原因
我的代码:
if (sidebar) {
listItems.forEach(function(listItem) {
listItem.showSubmenu = showSubmenu;
listItem.addEventListener('click', listItem.showSubmenu.bind(this, subLists), true);
});
if (sidebarButton) {
sidebarButton.addEventListener('click', onClickOnButton.bind(this, sidebar));
}
}
if (sidebar.getAttribute('data-reduce') === 'true') {
listItems.forEach(function(listItem) {
listItem.removeEventListener('click', listItem.showSubmenu, true);
});
}
function showSubmenu(subLists, e) {
var target = e.currentTarget,
subList = target.querySelector('.sidebar__sublist');
if (subList) {
if (subList.style.display !== 'block') {
[...subLists].forEach(hideSubList);
$(subList).slideDown('slow', function() {
subList.style.display = 'block';
target.querySelector('.sidebar__list__item__link__arrow').textContent = 'keyboard_arrow_up';
});
} else {
$(subList).slideUp('slow', function() {
subList.style.display = 'none';
target.querySelector('.sidebar__list__item__link__arrow').textContent = 'keyboard_arrow_down';
});
}
}
}
结果:事件未被删除。正如@GACy20所说的listItem.showSubmenu与listItem.showSubmenu.bind不同(这是子列表) 试着这样做
listItem.showSubmenu = showSubmenu.bind(this, subLists);
listItem.addEventListener('click', listItem.showSubmenu, true);
listItem.showSubmenu
与listItem.showSubmenu.bind(这是子列表)
不同。当您bind
时,将创建一个要处理的新对象。在我的book@GACy20是的,但是我需要传递对象事件
,那么还有其他解决方案吗?@tonymx227您已经有了jQuery。为什么不使用.on()
和.off()
?我正在删除我的jQuery库,在接下来的几个月里我想使用原生javascript。