Подтвердить что ты не робот

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;
        });
4b9b3361

Ответ 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.

Это трудно сделать без редактирования исходного кода.