Javascript 重新绑定与.off()方法jQuery解除绑定的事件处理程序
我有一个元素,我们称之为Javascript 重新绑定与.off()方法jQuery解除绑定的事件处理程序,javascript,jquery,Javascript,Jquery,我有一个元素,我们称之为div1,我将一个事件“click”绑定到该元素,以便它在单击时运行一些代码。 然后我得到了另一个元素,我们称它为div2,当它被单击时,它运行这行代码:div1.off('click')因此,现在div1单击事件处理程序已成功解除绑定 这工作得非常好,但是我想稍后“重新绑定”这个div1click事件,比如第三个div click事件 我在任何地方都找不到如何重新绑定我调用的.off()on的单击事件。 有人知道我怎样才能做到这一点吗 我所尝试的: div1.one('
div1
,我将一个事件“click”绑定到该元素,以便它在单击时运行一些代码。
然后我得到了另一个元素,我们称它为div2
,当它被单击时,它运行这行代码:div1.off('click')代码>因此,现在div1
单击事件处理程序已成功解除绑定
这工作得非常好,但是我想稍后“重新绑定”这个div1
click事件,比如第三个div click事件
我在任何地方都找不到如何重新绑定我调用的.off()on的单击事件。
有人知道我怎样才能做到这一点吗
我所尝试的:
div1.one('click',function() {
...some code
});
div2.on('click',function() {
...some code
div1.off('click');
});
//all good so far
div3.on('click',function() {
...some code
div1.on('click'); //this is the part which is obviously wrong i just put it to show my intentions - this line needs to "rebind" the div1 click event
});
您可以将div1.on中定义的匿名函数提取为普通函数,然后可以重用该函数。如下图所示-
var div1=$(“#一”)
var div2=$(“#二”)
var div3=$(“三”)
第1.1部分(“单击”,第1部分单击)//将匿名函数更改为普通函数
div2.on('click',function(){
console.log('2');
第1部分:关闭(“点击”);
});
div3.on('click',function(){
console.log('3');
div1.on('click',div1单击);
});
函数div1Click(){
console.log('1');
}
一
二
三
您可以将div1.on中定义的匿名函数提取为正常函数,然后可以重用该函数。如下图所示-
var div1=$(“#一”)
var div2=$(“#二”)
var div3=$(“三”)
第1.1部分(“单击”,第1部分单击)//将匿名函数更改为普通函数
div2.on('click',function(){
console.log('2');
第1部分:关闭(“点击”);
});
div3.on('click',function(){
console.log('3');
div1.on('click',div1单击);
});
函数div1Click(){
console.log('1');
}
一
二
三
您应该为您的单击创建一个函数,例如myfunc
您可以在单击div3
后重新绑定div1
let div1=$('#div1');
设div2=$('#div2');
设div3=$('#div3');
函数myfunc(){
警惕(“哈哈!”)
}
第一部分(“点击”,myfunc);
第一部分('点击',函数(){
console.log('off')
div1.off('click',myfunc);
});
div3.one('单击',函数(){
console.log('on')
第1节“点击”,myfunc;
});代码>
第一组
第二组
div3
您应该为您的单击创建一个函数,例如,myfunc
您可以在单击div3
后重新绑定div1
let div1=$('#div1');
设div2=$('#div2');
设div3=$('#div3');
函数myfunc(){
警惕(“哈哈!”)
}
第一部分(“点击”,myfunc);
第一部分('点击',函数(){
console.log('off')
div1.off('click',myfunc);
});
div3.one('单击',函数(){
console.log('on')
第1节“点击”,myfunc;
});代码>
第一组
第二组
div3
打开和关闭单击事件的另一种方法是始终保持单击捕获,但使操作依赖于额外的数据标志(此处:关闭):
$('div[id]”)。在('click',function()上{
设sw={two:true,three:''}[this.id];
如果(sw==undefined){//div#单击了一个:执行以下操作:
如果(!this.dataset.off)console.log(this.id);//执行该操作
}
else$('div#one')[0].dataset.off=sw;//按钮#两个或#三个已单击
}); 代码>
div{cursor:pointer}
一
二
三个
打开和关闭单击事件的另一种方法是始终保持单击捕获,但使操作依赖于额外的数据
标志(此处:关闭
):
$('div[id]”)。在('click',function()上{
设sw={two:true,three:''}[this.id];
如果(sw==undefined){//div#单击了一个:执行以下操作:
如果(!this.dataset.off)console.log(this.id);//执行该操作
}
else$('div#one')[0].dataset.off=sw;//按钮#两个或#三个已单击
}); 代码>
div{cursor:pointer}
一
二
三个
添加您的html
css
js
->您到目前为止尝试了什么!我编辑我的帖子。感谢您的html
css
js
->您迄今为止所做的一切!我编辑我的帖子。谢谢这是一个很好的解决方案,我一直在考虑,但当我尝试它时,它运行了两次动作,因为它只需点击两下……有什么想法吗?-谢谢你的回答,顺便说一句!我想我不明白你的意思,你能解释得更清楚些吗@UrielBitton@UrielBitton它运行两次动作?哪一个?你可以看到div3的click功能,当你点击div3时,它会在div1上运行click,然后当我点击div1时,它会运行自己的功能。因此,运行div1中的代码twice@UrielBitton我懂了。。让我检查一下,这是一个很好的解决方案,我一直在考虑,但当我尝试它时,它会运行两次操作,因为它会执行两次单击…有什么想法吗?-谢谢你的回答,顺便说一句!我想我不明白你的意思,你能解释得更清楚些吗@UrielBitton@UrielBitton它运行两次动作?哪一个?你可以看到div3的click功能,当你点击div3时,它会在div1上运行click,然后当我点击div1时,它会运行自己的功能。因此,运行div1中的代码twice@UrielBitton我懂了。。让我查一下