Javascript 存储和还原事件处理程序
请帮助修复我的功能,存储一个元素的事件并删除它们,然后重新安装 我不知道哪里出了问题,该函数只会删除元素的事件,不会恢复 请帮忙修理 HTMLJavascript 存储和还原事件处理程序,javascript,jquery,events,handler,Javascript,Jquery,Events,Handler,请帮助修复我的功能,存储一个元素的事件并删除它们,然后重新安装 我不知道哪里出了问题,该函数只会删除元素的事件,不会恢复 请帮忙修理 HTML JS $(“#a”).hover(函数(){alert(“test”)}); $(“#b”)。单击(函数(){ 测试手柄('a'); } 功能测试手柄(id){ 目标=$(id); if($.hasData(target.get(0)){//如果elment有event | | target=element 目标[0]。事件名称=[]; 目标[0
JS
$(“#a”).hover(函数(){alert(“test”)});
$(“#b”)。单击(函数(){
测试手柄('a');
}
功能测试手柄(id){
目标=$(id);
if($.hasData(target.get(0)){//如果elment有event | | target=element
目标[0]。事件名称=[];
目标[0]。事件处理程序=[];
events=$.\u data(target.get(0),'events');//获取元素的所有事件
$.each(事件、函数(事件名称、事件处理程序){
目标[0]。事件名称。推送(事件名称);
目标[0]。事件处理程序。推送(事件处理程序);
});//存储事件
target.off();//删除事件
}else{//具有elment no事件
对于(var i=0;i
当您在事件中迭代时,您几乎得到了它。事件处理程序实际上是该事件处理程序的一个数组(一个事件可以附加多个处理程序)。因此,您需要为每个事件将这些处理程序保存在一个数组中,以便以后可以重新附加它们
:
功能测试\u句柄(id){
目标=$(id);
事件=$。_数据(目标[0],“事件”);
如果(事件!=未定义){
目标[0]。事件名称=[];
目标[0]。事件处理程序=[];
$.each(事件、函数(事件名称、事件处理程序){
目标[0]。事件名称。推送(事件名称);
var _=[];
对于(var i=0;iI)还有一个问题,您是否认为此函数会占用大量性能并明显降低加载处理时间?我找到了另一种处理方法。例如,如果($this.data('executing'))返回,那么$this.data('executing',true)。您认为哪种方式更好?我不认为此函数会影响应用程序的性能,但是可能最好将第一个“if”(if($.hasData(target.get(0)){)替换为:“if($。\u data(target[0],'events')!=undefined){)。请查看此示例:
<a href="#" id="a">a</a>
<a href="#" id="b">b</a>
$("#a").hover(function(){alert("test")});
$("#b").click(function(){
Test_Handle('#a');
}
function Test_Handle(id) {
target = $(id);
if($.hasData(target.get(0))){ // if the elment has event || target = element
target[0].event_name = [];
target[0].event_handler = [];
events = $._data(target.get(0), 'events'); // take all events of the element
$.each(events, function(event_name, event_handler){
target[0].event_name.push(event_name);
target[0].event_handler.push(event_handler);
}); //store the events
target.off(); // delete the events
}else{ // has the elment no event
for(var i=0; i < target[0].event_handler.length; i++){
target.on(target[0].event_name[i], target[0].event_handler[i]);
} // re-store the events
target[0].event_name = [];
target[0].event_handler = []; //reset
}
}
function Test_Handle(id) {
target = $(id);
events = $._data(target[0], 'events');
if(events!=undefined){
target[0].event_name = [];
target[0].event_handler = [];
$.each(events, function(event_name, event_handler){
target[0].event_name.push(event_name);
var _handlers=[];
for(var i=0;i<event_handler.length;i++){
_handlers.push(event_handler[i].handler);
}
target[0].event_handler.push(_handlers);
}); //store the events
target.off(); // delete the events
}else{ // has the elment no event
for(var i=0; i < target[0].event_handler.length; i++){
for(var ii=0;ii<target[0].event_handler[i].length;ii++){
target.on(target[0].event_name[i], target[0].event_handler[i][ii]);
}
} // re-store the events
target[0].event_name = [];
target[0].event_handler = []; //reset
}
}
$("#a").hover(function(){alert("test")});
$("#b").click(function(){
Test_Handle('#a');
});