请帮助修复我的功能,存储一个元素的事件并将其删除,然后重新安装;
我不知道问题出在哪里,该函数只会删除element的事件,不会恢复。
请帮忙修复。
HTML
<a href="#" id="a">a</a>
<a href="#" id="b">b</a>
JS
$("#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
}
}
当您迭代事件时,您几乎就明白了event_handler
实际上是该事件的处理程序的数组(一个事件可以附加多个处理程序)。因此,您需要将每个事件的这些处理程序保存在一个数组中,以便稍后可以重新附加它们。
Try this http://jsfiddle.net/JELsT/4/:
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');
});
JSFiddle 示例 http://jsfiddle.net/JELsT/4/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)