2015-09-29 3 views
0

Примечание: Все события паб-суб в мой вопрос через он JQuery (в)/триггер()Выполнить обработчик событий в JQuery, если пользовательское событие уже вызвало

У меня есть модуль (так называемый заголовок) в моем приложении, что спусковые пользовательское событие («Заголовок: init») в некоторый момент времени. Это событие будет срабатывать ровно один раз.

Многие другие модули приложения подписываются на это событие. Я хотел бы, чтобы обработчики событий в этих модулях выполнялись, если событие «Заголовок: init» запускалось до присоединения обработчиков. Кроме того, обработчики выполняются так, как ожидалось (один раз заголовок «Заголовок: init»).

Надеюсь, я понятен в том, что мне нужно - функциональность очень похожа на стандартное «готовое» событие jQuery - обработчики выполняются, как только они подключаются, если DOM готов, иначе они выполняются после того, как DOM готов.

Чтобы повторить, «Header: init» запускается ровно один раз.

Как это сделать? Для этого мне не нужны переменные, плавающие вокруг приложения. Ищете чистое решение - желательно, как раз работает готовое мероприятие. Я проверил сайт jQuery для любых перехватчиков событий, предоставленных jQuery для этого, но все в центре событий браузера, таких как клик и т. Д., И нет для пользовательских.

Цените любые указатели.


Edit: Для того, чтобы четко сформулировать требование ...

Время х: Некоторые модуль подписавшись на заголовок: INIT событие имеет код, приведенный ниже, и запускается на выполнение теперь ...

$ (документ) .on ('Заголовок: init', function() {/ * обработчик */ ... });

Время х + 1: Предположим, что модуль Header вызвал событие сейчас (т.е. более поздний момент времени)

$ (документ) .trigger ('Заголовок: INIT');

Мое требование - обработчик все равно должен выполняться.

+0

_ «надеюсь, что я ясно, что я требую» _ Не совсем ; в этой части вопроса: _ «хотели бы, чтобы обработчики событий в этих модулях выполнялись, если событие« Заголовок: init »срабатывало до присоединения обработчиков« _? До каких обработчиков были прикреплены? Может включать 'js' в Question? – guest271314

+0

_ «Время x + 1: предположим, что модуль заголовка вызвал событие (то есть более поздний момент времени) $ (документ) .trigger ('Header: init'); Мое требование - обработчик, который все равно должен выполняться." _ Не обрабатывается ли обработчик с помощью 'js'? Может ли создавать демонстрационные файлы для демонстрации? – guest271314

ответ

0

Попробуйте заменить определение имени функции для анонимной функции в обработчике вызвать указанную функцию в качестве обработчика для различных объектов

$(document).ready(function() { 
 
// handler for `Header:init` namespace 
 
var handleEvents = function handleEvents(e, msg) { 
 
    $("div").html(msg) 
 
}; 
 
// trigger `Header:init` handler `handleEvents` on `document` object 
 
// at `document` ready event 
 
$(this).on("Header:init", handleEvents) 
 
.trigger("Header:init", [this.nodeName]); 
 
// trigger `handlerEvents` on `"header"` selector , or `document` at `click` event 
 
$("header").on("click", function() { 
 
    // $(document).trigger("Header:init") 
 
    $(this).trigger("Header:init", [this.nodeName]) 
 
}); 
 
    
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<header>click</header> 
 
<div></div>

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