如何使用unbind存储删除哪些事件并稍后重新应用?
假设我有这个元素:
<div id="thediv">The Div</div>
其onclick事件附加了不同数量的函数。我知道我可以使用unbind来删除所有的onclick函数:
$("#thediv").unbind("click");
如何存储未绑定的函数以便以后重新绑定它们?
请注意,这必须适用于jQuery 1.5。
我确实看到了this previous answer ,但有一些我不明白的事情:
ary_handlers[idx]
在做什么? (我不是真的在寻找这些问题的答案,除非有必要解释我关于捕获未绑定函数的问题的解决方案。)
答案 0 :(得分:3)
我认为你可以这样做: 通过克隆div并在对象中保存数据('events')来存储div的事件。您可以在对象上迭代并绑定事件。你必须克隆,因为当你取消绑定事件时,原始数据('事件')被删除。(希望我理解你在寻找什么)
<div id='my'>my</div>
var my = $('#my');
my.click(function(){
alert('my');
});
my.hover(function(){
$(this).css('color', 'red');
});
my.click(function(){
alert('you');
});
var ev =my.clone(true).data('events');
my.unbind();
for (var e in ev){
//you have to iterate on the property since is an array with all the handlers for the same event)
for (i= 0; i < ev[e].length; i++){
my.bind(e, ev[e][i]);
}
}
fidlle http://jsfiddle.net/pXAXW/
编辑 - 要在1.5.2中完成此工作,您只需要更改附加事件的方式,因为它们的保存方式不同:
$(document).ready(function(){
var theDiv = $("#thediv");
theDiv.click(function(){
$(this).css("border-color", "blue");
alert("Click!");
});
theDiv.click(function(){
$(this).css("border-color", "blue");
alert("clack!");
});
var theEvents = theDiv.clone(true).data("events");
// Unbind events from the target div
theDiv.unbind("click");
// Put the saved events back on the target div
for (var e in theEvents){
// must iterate through since it's an array full of event handlers
for ( i=0; i<theEvents[e].length; i++ ){
theDiv.bind(e, theEvents[e][i].handler);
}
}
});
在这里小提琴:(与Katiek相同)http://jsfiddle.net/nicolapeluchetti/CruMx/2/(如果您没有完全点击div,则会触发两次事件!) 我还更新了我的小提琴,使用jquery 1.5.2 http://jsfiddle.net/pXAXW/1/)