2014-10-06 5 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

ответ

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

Thanks; главное, однако, не знать типы событий; только пространство имен. Я обновил вопрос. – Dygerati

Смежные вопросы