Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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 jQuery将元素上的所有事件侦听器持久化以备将来设置_Javascript_Jquery_Jquery Events - Fatal编程技术网

Javascript jQuery将元素上的所有事件侦听器持久化以备将来设置

Javascript jQuery将元素上的所有事件侦听器持久化以备将来设置,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,使用jQuery,我需要: 持久化添加到元素的所有事件处理程序的列表 将它们全部移除几秒钟,然后 将事物返回到初始状态(重新分配相同的事件处理程序) 我发现使用(一些jQuery内部机制)获取当前侦听器的列表: 然后,我可以使用删除所有事件侦听器 submitButton.off(); 但最后一个阀杆似乎不起作用 setTimeout(function () { $._data(submitButton[0], "events", eventsSubmitBtn); }

使用jQuery,我需要:

  • 持久化添加到元素的所有事件处理程序的列表
  • 将它们全部移除几秒钟,然后
  • 将事物返回到初始状态(重新分配相同的事件处理程序)
  • 我发现使用(一些jQuery内部机制)获取当前侦听器的列表:

    然后,我可以使用删除所有事件侦听器

     submitButton.off();
    
    但最后一个阀杆似乎不起作用

     setTimeout(function () {
          $._data(submitButton[0], "events", eventsSubmitBtn);
        }, 5000);
    
    eventsSubmitBtn
    是一个空数组

    这是初始设置时应该采用的方式吗?我需要对这些对象进行深度克隆之类的操作,还是不能使用
    $。\u data


    N.B.我可以在所有其他系统js代码之后添加我的cistom代码,因此我不能将分配给
    $.fn.的代码放在任何代码之前。我编写的代码将在最后一次启动时运行,并在脚本运行之前附加其他事件侦听器。

    当您获得对$返回的对象的引用时。\u data(),对该对象的任何更改都不会不被注意,即在调用.off()之后,该对象将发生更改,以反映不再附加任何处理程序

    您可以通过获取对象的浅层副本来解决此问题(例如,使用
    object.assign

    但这并不是一个真正值得推荐的方法。根据一份报告,“
    jQuery.\u数据(元素,“事件”)
    …是一种内部数据结构,未记录,不应修改。”。当您在恢复处理程序时修改它时,这不能被视为最佳实践。但是,即使只读取它,也应该只用于调试,而不是用于生产代码

    在事件处理代码中添加一个条件更为谨慎:

    var ignoreEventsFor = $(); // empty list
    
    $("#button").on('click', function () {
        if (ignoreEventsFor.is(this)) return;
        // ...
    });
    
    然后,在需要时,将
    ignoreevents设置为要忽略事件的元素。当您想要恢复正常时,再次将其设置为
    $()

    现在,将其添加到所有事件处理程序中可能会成为一个负担。如果您坚持使用
    on()
    来附加事件处理程序,那么您可以改为扩展
    $.fn.on
    以便它将此逻辑添加到您传递给它的处理程序中

    下面的演示有一个按钮,可以通过更改背景颜色来响应单击。通过复选框,您可以禁用此操作:

    /*在jQuery加载后立即放置此部件,但在任何
    其他图书馆也包括在内
    */
    var ignoreevents for=$(),//空列表
    originalOn=$.fn.on;
    $.fn.on=函数(…参数){
    变量f=args[args.length-1];
    如果(f的类型==‘函数’){
    args[args.length-1]=函数(…args2){
    如果(忽略事件)是(本))返回;
    f、 调用(此,…args2);
    };
    }
    调用(此,…args);
    }
    /*下一部分属于演示,可以放在任何地方*/
    $(函数(){
    $(“#colorButton”)。在('单击',函数(){
    //只是一些改变背景的处理程序
    var random=('00'+(Math.random()*16*16*16).toString(16)).substr(-3);
    $('body').css({backgroundColor:#“+random});
    });
    $(“#切换器”).on('change',function(){
    //切换颜色按钮事件的进一步处理:
    ignoreEventsFor=$(this).is(':checked')?$(“#colorButton”):$();
    });
    });
    
    
    改变颜色

    禁用事件
    当您获得对由
    $.u data()
    返回的对象的引用时,对该对象的任何更改都不会被忽略,即,在调用
    .off()
    后,该对象将发生更改,以反映不再附加任何处理程序

    您可以通过获取对象的浅层副本来解决此问题(例如,使用
    object.assign

    但这并不是一个真正值得推荐的方法。根据一份报告,“
    jQuery.\u数据(元素,“事件”)
    …是一种内部数据结构,未记录,不应修改。”。当您在恢复处理程序时修改它时,这不能被视为最佳实践。但是,即使只读取它,也应该只用于调试,而不是用于生产代码

    在事件处理代码中添加一个条件更为谨慎:

    var ignoreEventsFor = $(); // empty list
    
    $("#button").on('click', function () {
        if (ignoreEventsFor.is(this)) return;
        // ...
    });
    
    然后,在需要时,将
    ignoreevents设置为要忽略事件的元素。当您想要恢复正常时,再次将其设置为
    $()

    现在,将其添加到所有事件处理程序中可能会成为一个负担。如果您坚持使用
    on()
    来附加事件处理程序,那么您可以改为扩展
    $.fn.on
    以便它将此逻辑添加到您传递给它的处理程序中

    下面的演示有一个按钮,可以通过更改背景颜色来响应单击。通过复选框,您可以禁用此操作:

    /*在jQuery加载后立即放置此部件,但在任何
    其他图书馆也包括在内
    */
    var ignoreevents for=$(),//空列表
    originalOn=$.fn.on;
    $.fn.on=函数(…参数){
    变量f=args[args.length-1];
    如果(f的类型==‘函数’){
    args[args.length-1]=函数(…args2){
    如果(忽略事件)是(本))返回;
    f、 调用(此,…args2);
    };
    }
    调用(此,…args);
    }
    /*下一部分属于演示,可以放在任何地方*/
    $(函数(){
    $(“#colorButton”)。在('单击',函数(){
    //只是一些改变背景的处理程序
    var random=('00'+(Math.random()*16*16*16).toString(16)).substr(-3);
    $('body').css({backgroundColor:#“+random});
    });
    $(“#切换器”).on('change',function(){
    //切换颜色按钮事件的进一步处理:
    ignoreEventsFor=$(this).is(':checked')?$(“#colorButton”):$();
    });
    });
    
    
    改变颜色
    禁用电动汽车