Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 存储和还原事件处理程序_Javascript_Jquery_Events_Handler - Fatal编程技术网

Javascript 存储和还原事件处理程序

Javascript 存储和还原事件处理程序,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

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

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

请帮忙修理

HTML

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');
});