Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除不使用Javascript的事件侦听器_Javascript - Fatal编程技术网

删除不使用Javascript的事件侦听器

删除不使用Javascript的事件侦听器,javascript,Javascript,我试图用Javascript删除事件侦听器,但它似乎不起作用 我需要在处理程序中传递对象事件,这就是我使用.bind()的原因 我的代码: if (sidebar) { listItems.forEach(function(listItem) { listItem.showSubmenu = showSubmenu; listItem.addEventListener('click', listItem.showSubmenu.bind(this, subLists), tr

我试图用Javascript删除事件侦听器,但它似乎不起作用

我需要在处理程序中传递对象
事件
,这就是我使用
.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。