Javascript:从外部设置函数中删除绑定事件处理程序
我试图从设置侦听器的不同函数中删除带有绑定变量的事件侦听器 我已经从同一个功能中获得了sen,这与我试图做的不同: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(
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 */