jQuery - 将事件处理程序附加到预先存在的click事件

Nic*_*ick 29 javascript jquery events

我有一个已经定义的点击事件.我想知道什么是最好的办法是添加另一个事件处理这个事件,而不触及此代码(如果可能).

有没有办法将另一个事件处理程序附加到已定义的单击事件?

这是当前的点击事件定义:

 $(".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;
        });
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 31

你唯一能做的就是附加另一个(附加)处理程序:

$(".HwYesButton", "#HwQuizQuestions").click(function() {
    // something else
});
Run Code Online (Sandbox Code Playgroud)

jQuery将按照它们附加到元素的顺序调用处理程序.

您不能"扩展"已定义的处理程序.


顺便说一句.你的表述有点不精确.您没有定义点击事件.您只附加了单击事件处理程序.当用户单击某个元素时,浏览器会生成click事件.

您可以为一个元素添加任意数量的单击处理程序.也许你习惯于使用纯JavaScript:

element.onclick = function() {}
Run Code Online (Sandbox Code Playgroud)

使用此方法,您确实只能附加一个处理程序.但JavaScript提供了一些高级事件处理方法,我假设jQuery使用它们.


jes*_*loo 6

我知道这是一个老帖子,但也许这仍然可以帮助某人,因为我在搜索过程中仍然遇到了这个问题...

我想尝试做同样的事情,除了我希望我的动作在现有的内联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...
                });
            });
        });
Run Code Online (Sandbox Code Playgroud)


Jis*_*A P 5

您可以将另一个点击事件写入相同的事件,并且两者都将被触发.在这里看到它

<a id="clickme">clickme</a>
<script>
    $('#clickme').click(function () {
        alert('first click handler triggered');
    });
    $('#clickme').click(function () {
        alert('second click handler triggered');
    });
</script>
Run Code Online (Sandbox Code Playgroud)