恢复jQuery off()删除的事件

时间:2015-05-10 14:13:47

标签: jquery

我可以使用$('ul.links a').off()从一组元素中删除所有事件。

如何恢复所有已移除的事件?

我不希望在最初应用事件时使用命名函数,然后使用on()单独添加这些命名函数。也许在应用off()之前,我可以将所有事件保存在data()变量中吗?

1 个答案:

答案 0 :(得分:2)

有多个选项。这是一个回答你的问题:

//to store events
$('ul.links a').each(function () {
    $(this).data('events', $.extend(true, {}, $._data(this, 'events')));
});

//unbind events
$('ul.links a').off();

// to rebind events
$('ul.links a').each(function () {
    var $self = $(this);
    $.each($(this).data('events'), function (_, e) {
        $self.on(e[0].type, e[0].handler);
    });
});

请注意,$._data()不是公开支持的方法,这意味着它可以在不事先通知的情况下从版本更改为版本。

据说,更推荐的选项是在事件处理程序中设置一些标志来代替处理逻辑。