Существует довольно хороший плагин под названием jQuery.bind-first , который предоставляет аналоги нативных методов on
, bind
, delegate
и live
, которые выдвигают событие наверхочереди регистрации.Он также учитывает различия в регистрации событий между 1.7 и более ранними версиями.Вот как его использовать:
$('button')
.on ('click', function() { /* Runs second */ })
.onFirst('click', function() { /* Runs first */ });
Как и в большинстве этих ответов, большой недостаток заключается в том, что он опирается на внутреннюю логику регистрации событий jQuery и может легко сломаться, если она изменится, как это было в версии 1.7!Возможно, для долговечности вашего проекта было бы лучше найти решение, которое не включает угон внутренних компонентов jQuery.
В моем конкретном случае я пытался заставить два плагина играть хорошо.Я обработал его с помощью пользовательских событий, как описано в документации для метод trigger
.Возможно, вы сможете адаптировать подобный подход к вашим собственным обстоятельствам.Вот пример для начала:
$('button')
.on('click', function() {
// Declare and trigger a "before-click" event.
$(this).trigger('before-click');
// Subsequent code run after the "before-click" events.
})
.on('before-click', function() {
// Run before the main body of the click event.
});
И, в случае необходимости, вот как установить свойства объекта события, передаваемого в функцию-обработчик, и получить доступ к результату последнего события before-click
выполнить:
// Add the click event's pageX and pageY to the before-click event properties.
var beforeClickEvent = $.Event('before-click', { pageX: e.pageX, pageY: e.pageY });
$(this).trigger(beforeClickEvent);
// beforeClickEvent.result holds the return value of the last before-click event.
if (beforeClickEvent.result === 'no-click') return;