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我懂了。。让我查一下