插入在已注册的处理程序之前执行的JQuery单击处理程序

tee*_*nup 3 javascript jquery

我想在我的应用程序的所有页面上为每个(Button,Anchor,Select)附加一个click事件处理程序,并且该处理程序应该在以html声明的已经附加的处理程序之前运行onclick="return SomeFunction('a','b');".

我在stackoverflow上发现了一个关于预装处理程序的问题,这正是我想要的,问题的链接是: -

Jquery前置单击处理程序

但是,上面的代码不起作用,我怀疑它是否适用于提问者.我根据我的要求编写的代码是: -

<input type="button" value="Click 1" onclick="f2();" />

$(document).ready(function() {
            $("input[type=button]").each(function() {

                // your button
                var btn = $(this);

                // original click handler
                var clickhandler = btn.attr("onclick");
                btn.attr("onclick", "return false;");


                // new click handler
                btn.click(function() {
                    alert('Prepended Handler');
                    clickhandler();
                });
            });
        });

        function f2() {
            alert('Handler declared in HTML');
        }
Run Code Online (Sandbox Code Playgroud)

此代码的输出应为:显示"Prepended Handler"的警报,然后是显示"以HTML格式声明的处理程序"的下一个警报.

但是,实际结果是:只显示第一个警报,而第二个警报不显示.

如果您在此代码中发现任何问题,请告诉我.

而且,如何做到这一点.?

Kyl*_*yle 7

这应该重新排列您的点击处理程序.

$(document).ready(function() {
    $("input[type=button]").each(function() {

        // your button
        var btn = $(this);

        var clickhandler = this.onclick;
        this.onclick = null;


        // new click handler
        btn.click(function() {
            alert('Prepended Handler');
        });
        btn.click(clickhandler);
    });
});

function f2() {
alert('Handler declared in HTML');
}
Run Code Online (Sandbox Code Playgroud)