问题 如何在JQuery中绑定,解除绑定和重新绑定(单击)事件


在2周前问同样的问题之后 这里,我终于找到了“解决方案”。这就是我回答自己问题的原因。 ;)

如何在JQUERY中绑定,组合和重新绑定事件?


8655
2017-12-18 20:02


起源

可能重复 jquery rebind()禁用特定时间的事件,然后重新绑定它们 - Sterling Archer


答案:


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

$(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()或......!

文档

这是一个小提琴 尝试并试验它!

请享用!


10
2017-12-18 20:02



如果您已经在原始问题上回答了它,为什么要重新发布? - Kevin B
我想因为另一个解决方案也很好用! (更新旧帖子) - John Doe Smith
很棒的答案!这肯定帮助我暂时禁用了按钮的点击事件。而且,为了进一步强调,点击事件的上下文应该是如何在上面的答案中显示的! - Con Antonakos
问题:为什么这有效?我们是否在本机点击事件上启用/禁用“已禁用”属性? - Con Antonakos
重要!对于任何关注此事的人来说, .toggle() 方法在jQuery 1.8中已弃用,在jQuery 1.9中已删除。 (来源 - jQuery.com) - Laurence Cooper


一个更简单的解决方案是在对象中添加一个类,如果你想取消绑定它,那么删除这个类来重新绑定ex;

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

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

2
2018-01-07 21:54





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

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

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

-1
2018-06-04 02:26