2012-12-18 46 views
10

问同样的问题2个星期前here后,我终于找到了“的”解决方案。这就是我回答我自己的问题的原因。 ;)如何绑定,解除绑定并重新绑定(点击)事件在JQuery中

如何绑定,解除绑定并重新绑定事件jQuery的?

+2

可能的复制[jquery的重新绑定()禁用事件在特定的时间,然后重新绑定他们](https://stackoverflow.com/questions/13729681/jquery-rebind-disable-events-for-a-特定时间然后重新绑定他们) –

回答

10

,这是一个完美的解决方案。 (至少对我来说)

$(document).on('click', 'a#button', function(){ 
    $(this).after('<span> hello</span>'); 
    $('span').fadeOut(1000); 
}); 

$('a#toggle').toggle(
    function(){ 
     $(this).text('rebind'); 
     $('a#button').on('click.disabled', false); 
    }, 
    function(){ 
     $(this).text('unbind'); 
     $('a#button').off('click.disabled'); 
    } 
); 

“.on()”会这样做。注意:像在第一行中看到的那样绑定事件非常重要!它不适用于.click()或...!

查看docs

Here is a fiddle尝试它与它实验!

享受!

+1

如果你已经回答了你的原始问题,你为什么要转发它? –

+1

我想是因为其他解决方案也很好,很有用! (更新了旧帖子) –

+0

很好的答案!这当然帮助我暂时禁用按钮的点击事件。而且,为了更加强调,点击事件的上下文应该如何显示在上面的答案中! –

-1

此函数将jQuery扩展为包含一个与.on相同的附加事件处理函数的运算符。此外,它可以防止给定处理程序的多个实例连接到选择器。

请注意,删除和重新附加事件处理程序会更改它们附加的顺序。

(function ($) { 
    $.fn.reBind = function(events, handler) { 
     return this.off(events, handler).on(events, handler); 
    }; 
}(jQuery)); 
2

一种更简单和短期的解决方案是,如果你想解除绑定,然后删除这个类重新绑定前添加一个类的对象;

$('#button').click(function(){ 
    if($(this).hasClass('unbinded')) return; 
    //Do somthing 
}); 

$('#toggle').click(function(){ 
    $('#button').toggleClass('unbinded'); 
});