存储和还原事件处理程序

请帮助修复我的function,存储一个元素的事件并删除它们,然后重新安装;

我不知道问题在哪里,该函数只会删除元素的事件而不会恢复。

请帮忙解决。

HTML

a b 

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实际上是该事件的处理程序数组(一个事件可以附加许多处理程序)。 因此,您需要将这些处理程序保存在每个事件的一个数组中,以便稍后重新附加它们。

试试这个 :

 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 

JSFiddle的例子