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

4

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

我在stackoverflow上找到了一个有关添加处理程序的问题,这正是我想要的,该问题的链接是:-

Jquery prepend click handler

但是,上述代码无效,我怀疑它是否适用于提问者。根据我的要求编写的代码如下:

<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');
        }

这段代码的输出应该是:一个警报显示“Prepended Handler”,然后是下一个警报显示“在HTML中声明的处理程序”。
但实际结果是:只有第一个警报出现,第二个警报没有出现。
请告诉我您是否在此代码中发现任何问题。
如何解决这个问题?

使用 this.onclick = null; 替代 btn.attr("onclick", "return false;"); - Mathias Bynens
1个回答

8
这会重新安排您的点击处理程序。
$(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');
}

在将其应用于我的应用程序后,我发现这不是一个完整的解决方案。当我调用 setTimeout(clickhandler,0); 时,该处理程序的返回值会发生什么?我希望实际返回该返回值,但是该 setTimeout 语句立即返回。 - teenup
我刚刚更新并测试了它。事件仍然按照您想要的顺序触发。如果这不符合您的要求,请告诉我您想要返回什么,我会再次为您进行编辑。 - Kyle
看起来可能行得通,但实际上我找到了另一种完成任务的方式,我也会尝试这个方法,如果它可以运行,我会回来告诉你。现在,我接受这个答案。 - teenup
为什么需要 btn.attr("onclick", "return false"); - Snekse
@Snekse 我想这真的不是必要的。你应该用this.onclick=null;或类似的方式来替换那一行(我刚刚更新了我的答案)。我只是把它放在那里作为禁用默认onclick函数的一种方法。 - Kyle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接