Я ищу некоторую информацию о том, как наилучшим образом реализовать пользовательскую обработку событий в jquery. Я знаю, как подключать события от элементов dom, таких как «щелчок» и т. Д., Но я создаю крошечную библиотеку / плагин javascript для обработки некоторых функций предварительного просмотра.
У меня запущен скрипт для обновления некоторого текста в элементе dom из набора правил и ввода данных / данных, которые я получил, но теперь мне нужен тот же текст, показанный в других элементах, о которых этот скрипт не может знать. Мне нужен хороший шаблон, чтобы как-то наблюдать, как этот скрипт производит необходимый текст.
Так как мне это сделать? Я пропустил некоторые встроенные функции в jquery для создания / обработки пользовательских событий или мне нужен какой-нибудь плагин jquery для этого? Какой, по вашему мнению, лучший способ / плагин для этого?
Ответы:
Взгляните на это:
(перепечатано со страницы блога с истекшим сроком действия http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/ на основе архивной версии по адресу http://web.archive.org/web /20130120010146/http://jamiethompson.co.uk/web/2008/06/17/publish-subscribe-with-jquery/ )
Публикация / подписка с помощью jQuery
17 июня 2008 г.
В целях написания пользовательского интерфейса jQuery, интегрированного с автономной функциональностью Google Gears, я играл с некоторым кодом для опроса состояния сетевого подключения с помощью jQuery.
Объект обнаружения сети
Основная предпосылка очень проста. Мы создаем экземпляр объекта обнаружения сети, который будет регулярно опрашивать URL-адрес. В случае сбоя этих HTTP-запросов мы можем предположить, что сетевое соединение потеряно или сервер просто недоступен в настоящее время.
Вы можете посмотреть демо здесь. Настройте браузер на работу в автономном режиме и посмотрите, что произойдет ... нет, это не очень интересно
Триггер и связывание
Что интересно (хотя бы то, что меня волнует), так это метод, с помощью которого статус передается через приложение. Я наткнулся на практически не обсуждаемый метод реализации системы pub / sub с использованием методов триггера и связывания в jQuery.
Демо-код более тупой, чем нужно. Объект обнаружения сети публикует события «status» в документе, который активно их прослушивает, и, в свою очередь, публикует события «notify» всем подписчикам (подробнее об этом позже). Причиной этого является то, что в реальном приложении, вероятно, было бы больше логики, управляющей тем, когда и как публикуются события «уведомлять».
Из-за подхода JQuery, ориентированного на DOM, события публикуются (запускаются) на элементах DOM. Это может быть объект окна или документа для общих событий или вы можете сгенерировать объект jQuery с помощью селектора. Подход, который я использовал для демонстрации, заключается в создании почти пространственного подхода к определению подписчиков.
Элементы DOM, которые должны быть подписчиками, просто классифицируются как «subscriber» и «networkDetection». Затем мы можем публиковать события только для этих элементов (из которых только один в демоверсии), вызывая событие уведомления
$(“.subscriber.networkDetection”)
#notifier
ДИВ , который является частью.subscriber.networkDetection
группы абонентов , то есть анонимная функция , связанная с ней, эффективно действуя в качестве слушателя.Итак, поехали. Это все довольно многословно, и мой пример совсем не волнует. Это также не демонстрирует ничего интересного, что вы могли бы сделать с этими методами, но если кому-то вообще интересно копаться в источнике, не стесняйтесь. Весь код находится в заголовке демонстрационной страницы.
источник
Ссылка, приведенная в принятом ответе, показывает хороший способ реализации системы pub / sub с использованием jQuery, но я нашел код несколько сложным для чтения, поэтому вот моя упрощенная версия кода:
http://jsfiddle.net/tFw89/5/
источник
n
число аргументов.var eventData = [].slice.call(arguments).splice(1)
Я так думаю .. можно «связать» пользовательские события, например (из: http://docs.jquery.com/Events/bind#typedatafn ):
источник
myCustomEvent
поднят, привязка сверху добавляет слушателя.У меня был похожий вопрос, но на самом деле я искал другой ответ; Я ищу, чтобы создать пользовательское событие. Например, вместо того, чтобы всегда говорить это:
Я хочу сократить это до этого:
триггер и связывание не рассказывают всю историю - это плагин JQuery. http://docs.jquery.com/Plugins/Authoring
Функция «enterKey» присоединяется как свойство к jQuery.fn - это необходимый код:
http://jsfiddle.net/b9chris/CkvuJ/4/
Хорошее из вышеперечисленного заключается в том, что вы можете изящно обрабатывать ввод с клавиатуры на слушателях ссылок, таких как:
Изменения: обновлено для правильной передачи правильного
this
контекста обработчику и для возврата любого возвращаемого значения из обработчика в jQuery (например, если вы хотели отменить событие и всплывающее окно). Обновлен для передачи корректного объекта события jQuery обработчикам, включая код ключа и возможность отмены события.Старый jsfiddle: http://jsfiddle.net/b9chris/VwEb9/24/
источник
scroll
, который не распространяется. Я думаю, что вместо того, чтобы жесткоon
привязать слушателей к телу, мне нужны элементы, которые связаны с событием -event, чтобы самим запустить событие.Это старый пост, но я постараюсь обновить его новой информацией.
Чтобы использовать пользовательские события, вам нужно привязать его к некоторому элементу DOM и вызвать его. Так что вам нужно использовать
и
Код выглядит так:
Хорошее объяснение можно найти здесь и здесь . Почему именно это может быть полезно? Я нашел, как использовать это в этом превосходном объяснении от инженера Твиттера .
PS В простом javascript вы можете сделать это с новым CustomEvent , но остерегайтесь проблем с IE и Safari.
источник
Вот как я создаю пользовательские события:
Конечно, вы могли бы просто сделать
Но способ, который я написал, позволяет вам определить, предотвратил ли пользователь дефолт или нет, выполнив
Это позволяет вам прослушать запрос вашего конечного пользователя, чтобы он прекратил обработку определенного события, например, если вы щелкаете элемент кнопки в форме, но не хотите, чтобы форма отправляла сообщение в случае ошибки.
Я тогда обычно слушаю такие события
Еще раз, вы могли бы просто сделать
Но я всегда считал это несколько небезопасным, особенно если вы работаете в команде.
Нет ничего плохого в следующем:
Однако предположим, что по какой-либо причине мне нужно отменить привязку этого события (представьте отключенную кнопку). Я тогда должен был бы сделать
Это удалит все
eventname
события из$(element)
. Вы не можете знать, будет ли кто-то в будущем также связывать событие с этим элементом, и вы бы случайно отменили привязку и к этому событию.Безопасный способ избежать этого - это пространство имен для ваших событий, выполнив
Наконец, вы могли заметить, что первая строка
Лично я всегда отменяю привязку события, прежде чем связать его, просто чтобы убедиться, что один и тот же обработчик события никогда не вызывается несколько раз (представьте, что это была кнопка отправки в форме оплаты, а событие было связано 5 раз)
источник