2014-10-06 62 views
0

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

如:

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

$(window).trigger("testEvent.event_namespace"); 
$(window).trigger("testEventTwo.event_namespace"); 

与预期的行为是听者会捕获任何事件触发与指定的命名空间...

最终的目标很简单,就是能够听一些事实上会被我无法访问的代码触发。我希望能够说,“只需将你的事件添加到这个命名空间”,然后能够捕获那些,而不需要知道事件名称本身;只有命名空间。

可能吗?

+1

难道这是任何帮助:http://stackoverflow.com/questions/9735608/how-to-bind-to -all-custom-events-in-jquery – cjs1978 2014-10-06 22:47:57

回答

2

编辑,更新

尝试

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

的jsfiddle http://jsfiddle.net/guest271314/s87j4o6r/4/

+1

谢谢;主要的一点是不必知道事件类型;只有命名空间。我已经更新了这个问题。 – Dygerati 2014-10-08 15:56:53