Что такое "jQuery.event.special"?

Я новичок в jQuery, и я попытался найти код загрузки transition.js (строка 50) и выяснить, как он работает там. Я наткнулся на следующее:

$.event.special.bsTransitionEnd = {
      bindType: $.support.transition.end,
      delegateType: $.support.transition.end,
      handle: function (e) {
        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
      }

Я прочитал документацию, но не мог понять многое, кроме следующего:

 bindType: // the event you want to bind with 
 delegateType: // the event you want to delegate with

После некоторых исследований я нашел следующее:

Это специальные атрибуты для конечного события перехода, которые становятся доступными для последующего использования в transition.js.

Я пытаюсь выяснить, прочитав эту статью но все, что я хочу знать, это... Что такое $.event.special, ЧТО это использование этой линии? Каково его общее использование?

P.S.: я прочитал this Вопрос о SO, но у него больше внешних ссылок, чем сам ответ. Я надеялся, что у нас будет четкое каноническое Q & A о самом основном использовании $.event.special?

Ответы

Ответ 1

ЧТО это использование этой строки?

Я предполагаю, что вы имели в виду первую строку кода в своем вопросе. Он в основном определяет bsTransitionEnd как псевдоним для события завершения перехода (событие конца перехода может варьироваться от браузера к браузеру - это то, что делает функция transitionEnd(): определить правильное событие завершения перехода для браузера Я использовал webkitTransitionEnd здесь, но это может быть что-то другое в зависимости от браузера)

Зачем использовать псевдоним? Он изолирует всех обработчиков, которые Bootstrap присоединяет, используя этот псевдоним (например, $('myBootstrapDialog'). On ('bsTransitionEnd', обработчик Bootstrap) из любого $('myBootstrapDialog'). Off ('webkitTransitionEnd') другого кода (например, ваш код или, возможно, другая библиотека) - так что анимация конца Bootstrap будет работать!

Зачем вам или другой библиотеке это делать? WebkitTransitionEnd является стандартным событием, поэтому предположим, что вы решили добавить анимацию конца перехода в диалог начальной загрузки - вы, вероятно, будете делать $('myBootstrapDialog'). On ('webkitTransitionEnd', ваш обработчик), а позже вы решили удалить обработчик, вы должны перейти $('myBootstrapDialog'). off ('webkitTransitionEnd', ваш обработчик), но вы выберете его как $('myBootstrapDialog'). off ('webkitTransitionEnd') - это удаляет все события конца перехода: - (.

Но так как Bootstrap привязал к нему обработчики, используя 'bsTransitionEnd', единственный способ, которым вы могли бы испортить загрузку, - это сделать $('myBootstrapDialog'). off ('bsTransitionEnd') - не то, что вы делали бы случайно:-). Так что вуаля! Прошли ошибки, когда Bootstrap необъяснимо перестает работать из-за небольшого miscoding с вашей стороны.

В bindType и delegateType в основном указывается, что bsTransitionEnd является псевдонимом для связанных событий перехода, а также делегированных (пузырьков). Ручка в основном является функцией фильтра - все инициируемые события в основном проходят через это до того, как вызываются обработчики событий Bootstrap (если они вообще есть)

что такое $.event.special?

Я уверен, что вы уже знаете это большинство - это способ подключиться к механизму обработки событий jQuery, позволяя вам делать масштабную магию, например, делать X на каждом подключенном событии кликов на странице (представьте себе, что один за другим, в каждом месте, где вы привязали событие onclick), определите свои собственные события (со всей беспечной добротой и все, что с ним связано), запустите и обманывайте события, изменив объект события и т.д.

Каково его общее использование?

Я предполагаю, что это было риторическим:-) - у вас уже есть несколько действительно хороших примеров в блоге Бена Альмана, связанного с

(перефразируя) - скажем, вы отправляете AJAX и хотите отключить все клики на странице (вы, вероятно, не хотите, чтобы пользователь нажимал на и переходил на другую страницу через меню или менял флажок, и т.д.), а $.event.special.click должен помочь вам (конечно, просто проще или традиционно просто наложить прозрачный/частично прозрачный div с анимацией Submitting... или что-то или не делать ничего - большинство пользователей ждут, чтобы убедиться, что подача прошла успешно, по крайней мере, обычные: -))

Другой вариант использования - тот, который вы видели в коде начальной загрузки, но, как вы уже упоминали, вам обычно не нужно входить и использовать это, если вы не пишете библиотеку или что-то, что вы собираетесь распространять публично.

Ответ 2

$.event.special

API специальных событий jQuery - довольно гибкая система, с помощью которой вы можете указать привязки и отменить привязки, а также действия по умолчанию для настраиваемых событий. При использовании этого API вы можете создавать пользовательские события, которые при запуске выполняют больше, чем просто выполнение обработчиков связанных событий. Эти "специальные" события могут модифицировать объект события, переданный обработчикам событий, запускать другие совершенно разные события или выполнять сложную настройку и отключение код, когда обработчики событий привязаны или не связаны с элементами.

Перехватчики специальных событий jQuery представляют собой набор функций и свойств для каждого события, которые позволяют коду управлять поведением обработки событий в jQuery. Механизм похож на fixHooks, поскольку информация о специальном событии хранится в jQuery.event.special.NAME, где NAME - это имя специального события. Имена событий чувствительны к регистру.

Как и в случае с fixHooks, дизайн специальных крючков событий предполагает, что будет очень редко, что две несвязанные части кода хотят обрабатывать одно и то же имя события. Авторы специальных событий, которым необходимо изменить события с помощью существующих крючков, должны принять меры предосторожности, чтобы избежать появления нежелательных побочных эффектов, сбивая эти крючки.

 bindType: // the event you want to bind with 
 delegateType: // the event you want to delegate with

При определении bindType: String, delegateType: String эти свойства строки указывают, что специальное событие должно обрабатываться как другой тип события до тех пор, пока событие не будет доставлено. Тип bindType используется, если событие подключено напрямую, а делегируемый тип используется для делегированных событий. Эти типы обычно являются типами событий DOM и не должны быть самим особым событием.