覆盖已附加到事件的功能

时间:2020-03-10 16:07:05

标签: javascript dom-events

我想覆盖已附加到事件的函数。像这样:

let orFn = () => {
  console.log('old');
};

buttonEl.addEventListener('click', orFn);

orFn = () => {
  console.log('new');
};

但是,当我单击按钮时,仍会调用旧功能。 我已经看到了这个stackoverflow。我不能使用函数包装器。而且我想了解为什么这不起作用。

我的代码可在此处进行测试:jsfiddle

2 个答案:

答案 0 :(得分:1)

一种方法是删除第一个侦听器,然后添加另一个侦听器

id, title, slug  
1, "title 1", "title-1"
2, "title 2", "title-2"
3, "title 3", "title-3"
id, name, title, slug
1, "abc", "title 1", "title-1"
2, "abcd", "title 2", "title-2"
3, "abcde", "title 3", "title-3"

另一种方法是拥有一个侦听器,该侦听器可以在内部调用不同的函数。示例:

let orFn = () => {
  console.log('old');
};

let orFnNew = () => {
  console.log('new');
};

var buttonEl = document.querySelector('button')

buttonEl.addEventListener('click', orFn);

// remove old listener
buttonEl.removeEventListener('click', orFn);

// add another one
buttonEl.addEventListener('click', orFnNew);
<button>button</button>

答案 1 :(得分:0)

使用bind()的一种方法。

const btn = document.getElementById('btn');

let orFn = () => {
  alert('old');
};

orFn = () => {
  alert('new');
};

orFn.bind(orFn)

btn.addEventListener('click', orFn);

这将与新功能绑定,并在警报弹出窗口中显示new