如何将值传递给事件处理程序,并且仍然能够在JavaScript中删除事件侦听器?

时间:2018-09-28 02:02:40

标签: javascript addeventlistener

使用addEventLIstener和removeEventListener,JavaScript中是否有一种方法可以通过匿名函数将值传递给处理函数,并在以后的代码中仍然删除事件?

例如,我使用了element.addEventLister( 'mousedown', func, false ),后来又删除了它;但是如果要使用element.addEventListener( 'mousedown', function() { func(x); }, false ),则无法删除匿名函数的事件侦听器,或者至少是我在MDN上读取的内容,但无法将其删除。

我想对func进行闭包,以使事件在添加/注册事件侦听器时传递x的值,而不是在触发事件时传递x的值。那行得通,但是以后无法删除该监听器。

谢谢。

在某些情况下成功使用绑定后,我不了解如何在使用绑定时获取事件对象,但仍然能够随后删除事件侦听器。

例如,以下代码创建了一个类似于func的新函数f,其中x的闭包设置为值2。这样做的唯一目的是使侦听器可移动并且仍将参数传递给处理函数。但是焦点事件对象如何可用于f或func并且仍然删除监听器?

let x, f;
function func(a) { /* code...*/ }
x = 2;
f = func.bind(null, x);
element.addEventListener( 'focus', f, false );
x = 5;
// and later element.removeEventListener( 'focus', f, false );

在事件监听器不会被删除的情况下,我一直使用element.addEventListener( 'focus', function(evt) { func(evt, a); }, false)之类的东西,并将func声明为func(evt,a);。但是该侦听器不能直接删除,因为该处理程序是匿名函数。

我假设必须有一种简单的方法来执行此操作,但目前我还不了解。

谢谢。

0 个答案:

没有答案