取消绑定点击后绑定点击

时间:2014-01-23 09:56:41

标签: jquery

我想在取消绑定click事件后绑定click事件。例如。如果单击按钮1,则解除此按钮的绑定,当您单击按钮2时,它应再次绑定按钮1的单击事件。但绑定点击事件似乎无法正常工作。

$('#one').on('click',function(){  <<----------------------  
    alert('one clicked');                                | 
    $(this).off('click');                             click
});                                                      |
$('#two').on('click',function(){                      event
    alert('two clicked');                                |
    $('#one').on('click'); >>---------not binding the-----
});

demo


Ps:不使用标记变量。

3 个答案:

答案 0 :(得分:2)

定义click处理程序,而不是绑定anonymous函数。使用on绑定点击方法需要提供您在#two点击处理程序中未提供的事件处理程序

如果您查看on .on( events [, selector ] [, data ], handler(eventObject) )的文档,您会在此处看到处理程序不是可选的

您可以传递false代替处理程序,但这意味着您有一个只返回false的函数。

  

触发事件时执行的函数。值false是   也允许作为简单返回的函数的简写   false,jQuery api

$('#two').on('click',oneclickhandler);

$('#two').on('click',function(){
    alert('two clicked');
    $('#one').on('click', oneclickhandler);
});

function oneclickhandler(){
    alert('one clicked');
    $(this).off('click');
});

答案 1 :(得分:0)

使用命名处理程序并使用.one()注册处理程序

function handler() {
    alert('one clicked');
}
$('#one').one('click', handler);
$('#two').on('click', function () {
    alert('two clicked');
    $('#one').on('click', handler);
});

演示:Fiddle

答案 2 :(得分:0)

我刚刚尝试过它的工作很棒。你可以使用bind

$('#one').on('click',clickevent);

function clickevent(){    
    alert('one clicked');                                
    $(this).off('click');                  
}                                                     
$('#two').on('click',function(){                      
    alert('two clicked');                                
    $('#one').bind('click',clickevent); 
});

Jsfiddle