Javascript:从外部设置函数中删除绑定事件处理程序

Javascript:从外部设置函数中删除绑定事件处理程序,javascript,Javascript,我试图从设置侦听器的不同函数中删除带有绑定变量的事件侦听器 我已经从同一个功能中获得了sen,这与我试图做的不同: function testBind(var1,var2){ //remove the bound event from within this function <<< alert('bound event now removed'); } function setEvent(){ var addEvent = document.getElementById(

我试图从设置侦听器的不同函数中删除带有绑定变量的事件侦听器

我已经从同一个功能中获得了sen,这与我试图做的不同:

function testBind(var1,var2){
//remove the bound event from within this function <<<
alert('bound event now removed');
}

function setEvent(){
var addEvent =  document.getElementById("testBtn");   
var boundYes = yesFunction.bind( this, this );
addEvent.addEventListener('mouseup', boundYes);
}
我知道使用bind每次都会创建一个新的事件监听器,要删除该监听器,需要使用相同的变量设置并删除它


如何从
testBind
函数中正确删除事件侦听器?

一个选项是
setEvent
返回绑定函数,以便
testBind
可以删除它:

函数testBind(boundListener,元素){
元素。removeEventListener('mouseup',boundListener);
}
函数setEvent(){
var元素=document.getElementById(“testBtn”);
const yesFunction=()=>console.log('listener running');
var boundListener=yesFunction.bind(this,this);
元素addEventListener('mouseup',boundListener);
返回{boundListener,element};
}
const{boundListener,element}=setEvent();
testBind(boundListener,元素)
单击
如果(由于代码中的约束),另一个选项是通过自定义属性将处理程序与元素关联:

addEvent.boundYes = boundYes; /* Assign boundYes function to element */
testBind()
期间取消注册
'mouseup'
事件时,这将使您能够通过DOM元素本身访问此函数处理程序实例:

函数yesFunction(){
console.log('yesFunction');
}
函数testBind(var1,var2){
const addEvent=document.getElementById(“testBtn”);
const boundYes=addEvent.boundYes;
/*检查boundYes是否与元素关联*/
如果(是){
/*从元素中删除事件侦听器*/
addEvent.removeEventListener('mouseup',boundYes);
/*将函数与元素解除关联*/
addEvent.boundYes=未定义;
警报(“绑定事件现在已删除”);
}
}
函数setEvent(){
var addEvent=document.getElementById(“testBtn”);
/*防止多个boundYes处理程序*/
如果(!addEvent.boundYes){
var boundYes=yesFunction.bind(this,this);
addEvent.addEventListener('mouseup',boundYes);
/*将boundYes函数附加到元素*/
addEvent.boundYes=boundYes;
}
}
setEvent();
testBind()

testBtn
您需要将
boundYes
存储在
testBind
可以访问它的地方。这是一个非常有创意的解决方案,使用了一种我不熟悉的技术。非常感谢你。这正是我在项目中需要的。
addEvent.boundYes = boundYes; /* Assign boundYes function to element */