Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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_Events - Fatal编程技术网

Javascript jQuery事件命名空间中所有事件的一个侦听器?

Javascript jQuery事件命名空间中所有事件的一个侦听器?,javascript,jquery,events,Javascript,Jquery,Events,我知道我能够使用jQuery的、$.fn.on、off和trigger函数来命名事件的名称空间。是否可以设置一个能够侦听特定命名空间中所有事件的处理程序 例如: $(window).on(".event_namespace", function(e){ //handler }); $(window).trigger("testEvent.event_namespace"); $(window).trigger("testEventTwo.event_namespace"); 预期的行

我知道我能够使用jQuery的、$.fn.on、off和trigger函数来命名事件的名称空间。是否可以设置一个能够侦听特定命名空间中所有事件的处理程序

例如:

$(window).on(".event_namespace", function(e){
    //handler
});

$(window).trigger("testEvent.event_namespace");
$(window).trigger("testEventTwo.event_namespace");
预期的行为是侦听器将捕获使用指定命名空间触发的任何事件

最终目标只是能够监听一组事件,这些事件实际上是由我无法访问的代码触发的。我想说的是,只需将事件添加到此名称空间,然后就可以捕获这些事件,而无需知道事件名称本身;只有名称空间

可能吗?

编辑、更新

试一试


jshiddle

这有什么帮助吗:谢谢;但主要的一点是不必知道事件类型;只有名称空间。我已经更新了这个问题。
    var ns = ".event_namespace", log = [];

    // place below block at bottom of script block , 
    // after `n` events attached to `n` window, document, elements 

    // listen for events having `ns` namespace ,
    // attached to `window, document, "*"` , above
    $(window, document, "*").on("event", function(e, ns, type) {
        // do stuff when event having `ns` occurs 
        log.push([ns, type]);
        $("#log").html("type, namespace: " + log.slice(-1)
                       + "<br> total <i>" + ns + "</i> events: " 
                       + log.length)
    });

    // if dynamic elements , events later attached ,
    // re-run this piece to add `event` event to those elements
    $.each([window, document, $("*")], function(k, v) {
        if($._data(v, "events") !== undefined) {
            $.each($._data(v, "events"), function(key, val) {
                if (val[0].namespace === ns.slice(- (ns.length -1))) {
                    $(v).on(key + ns, function(e) {
                         $(e.target).trigger("event", [e.namespace, e.type])
                    })
                }
            })
        }
    });