JQuery - добавление обработчика события в предыдущий клик
У меня есть событие click, которое уже определено. Мне было интересно, как лучше всего добавить другой обработчик события к этому событию, не касаясь этого кода (если это возможно).
Есть ли способ просто добавить другой обработчик события к уже определенному событию клика?
Это текущее определение события клика:
$(".HwYesButton", "#HwQuizQuestions")
.append("<a href='javascript:void(0);' rel='.HwYesButton'>Yes</a>")
.click(function(event) {
var button = $(this).parent();
var questionId = button.attr('id');
$iadp.decisionPoint["HwQuizYourself"].Input.inputProvided(questionId);
button.find(".HwNoButton").removeClass("HwButtonSelected");
$(this).addClass("HwButtonSelected");
button.removeClass("HwQuestionSkipped");
$iadp.flat.setBoolean(questionId, true);
return false;
});
Ответы
Ответ 1
Единственное, что вы можете сделать, это прикрепить другой (дополнительный) обработчик:
$(".HwYesButton", "#HwQuizQuestions").click(function() {
// something else
});
jQuery вызовет обработчики в том порядке, в котором они были прикреплены к элементу.
Вы не можете "расширить" уже определенный обработчик.
Btw. ваша формулировка немного неточна. Вы не определяете событие click. Вы только прикрепляете обработчики кликов. Событие клика генерируется браузером, когда пользователь нажимает на какой-либо элемент.
Вы можете иметь столько обработчиков кликов, сколько хотите для одного элемента. Возможно, вы привыкли к этому в простом JavaScript:
element.onclick = function() {}
С помощью этого метода вы действительно можете подключить только один обработчик. Но JavaScript предоставляет некоторые расширенные методы обработки событий, которые, как я полагаю, использует jQuery.
Ответ 2
Я знаю, что это старый пост, но, возможно, это может помочь кому-то, так как мне все же удалось наткнуться на этот вопрос во время моего поиска...
Я пытаюсь сделать то же самое, кроме того, что я хочу, чтобы мои действия запускались до существующих встроенных событий onClick. Это то, что я сделал до сих пор, и кажется, что он работает нормально после моих первоначальных тестов. Вероятно, он не будет обрабатывать события, которые не являются строковыми, например те, которые связаны с другим javascipt.
$(function() {
$("[onClick]").each(function(){
var x = $(this).attr("onClick");
$(this).removeAttr("onClick").unbind("click");
$(this).click(function(e){
// do what you want here...
eval(x); // do original action here...
});
});
});
Ответ 3
Вы можете просто написать другое событие клика в одно и то же, и оба будут активированы. Смотрите здесь
<a id="clickme">clickme</a>
$("#clickme").click(function(){
alert("first click handler triggered");
});
$("#clickme").click(function(){
alert("second click handler triggered");
});
Ответ 4
Ajax может усложнить проблему здесь. Если вы вызываете два события, первый из которых является ajax-вызовом, то второе событие, вероятно, срабатывает задолго до того, как ответ вернется.
Поэтому, даже если события запускаются в правильном порядке, вам действительно нужно войти в функцию обратного вызова в вызове ajax.
Это трудно сделать без редактирования исходного кода.