Можете ли вы связать .click(), чтобы он срабатывал до onclick?
Я пишу jQuery для приложения, которое создается в JSF. Компоненты JSF используют много своих JS для того, чтобы делать все, что делает JSF, и они используют множество атрибутов onclick для обработки всего этого.
Существует ли правильный/правильный способ привязки вашего собственного события click к элементу и убедитесь, что ваше событие срабатывает до события onclick по умолчанию? Похоже, что по умолчанию функция jQuery click запускается после любых вызовов встроенной функции onclick.
Ответы
Ответ 1
В jQuery события запускаются строго в том порядке, в котором они были зарегистрированы.
Вы можете обойти все встроенные обработчики стиля DOM0 onclick
, выполнив итерацию по всей DOM, удалив эти свойства onclick
, а затем зарегистрировав собственный обработчик, который затем вызывает первоначально определенную функцию.
Что-то вроде:
$('[onclick]').each(function() {
var handler = $(this).prop('onclick');
$(this).removeProp('onclick');
$(this).click(handler);
});
См. http://jsfiddle.net/alnitak/2SCTK/
Итак, сначала зарегистрируйте свои собственные обработчики с помощью jQuery, затем вызовите приведенный выше код, чтобы удалить обработчики исходного текста inline onclick
и перерегистрировать их, как если бы они добавили jQuery.
Код EDIT упрощен, чтобы просто использовать оригинальную функцию - jQuery гарантирует, что функция будет вызвана с правильным контекстом. Предыдущий код, явно задающий контекст window
, был неправильным.
Ответ 2
Вы можете удалить событие onClick
из элемента DOM, а затем восстановить его с помощью jQuery.
<div id="click" onclick="alert('DOM')">CLICK ME</div>
$('#click').click(function(){
alert('jQuery');
});
var clickFunc = $('#click').prop('onclick');
$('#click').removeProp('onclick');
$('#click').click(clickFunc);
События вызываются в том порядке, в котором они связаны, поэтому единственный способ вызвать вашу функцию - развязать, а затем восстановить оригинальную функцию.
Демо: http://jsfiddle.net/wYd5t/2/
Ответ 3
Невозможно назначить порядок запуска событий для того же слушателя на том же элементе.
Каждый браузер может запускать события в любом порядке, который он выбирает.
Ответ 4
Вы можете использовать onmousedown
для элемента.