我可以使用$('ul.links a').off()
从一组元素中删除所有事件。
如何恢复所有已移除的事件?
我不希望在最初应用事件时使用命名函数,然后使用on()
单独添加这些命名函数。也许在应用off()
之前,我可以将所有事件保存在data()
变量中吗?
答案 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()
不是公开支持的方法,这意味着它可以在不事先通知的情况下从版本更改为版本。
据说,更推荐的选项是在事件处理程序中设置一些标志来代替处理逻辑。