2

我有ASP:Button一页。它呈现为 HTML,如下所示:

<input type="submit" name="myButton" value="Do something" 
    onclick="javascript:WebForm_DoPostBackWithOptions(
        new WebForm_PostBackOptions('myButton', '', true, '', '', false, false))"
    id="myButton" />

现在我试图通过 jQuery 事件处理程序阻止此按钮的默认行为(提交表单):

$('#myButton').click(function () { 
    // do some client-side stuff

    if (someCondition) {
        // don't postback!
        return false;
    }
});

这里的问题是,ASP 粘贴在输入上的内联点击处理程序似乎每次都在 jQuery 事件处理程序之前执行。

这里最简单的解决方案是使用普通input type="button"而不是ASP:Button,不幸的是,这不是一种可能性,因为这ASP:Button会执行此场景中所需的许多其他事情。

防止表单提交发生的最佳方法是什么?我曾想过使用字符串操作将我的处理程序添加到元素的onclick属性上,但这似乎真的很脏。我也想避免使用,OnClientClick因为这需要我的处理函数公开​​。有没有更好的办法?

4

2 回答 2

2

您是否尝试将OnClientClick="return false;"属性添加到您的 aspx 按钮控件?

不用担心,看看这篇文章,它提供了一个 javascript 事件卸载脚本:Is it possible to remove all event handlers of a given element in javascript?

我认为您对最后一种方法 DomLib.prototype.removeEventsByTypeEx 感兴趣

于 2012-08-09T20:20:14.213 回答
0

我刚刚找到了一个方法

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    $(function () {
        var ploopButton = null;
        $("#ploop").click(function (e) {
            ploopButton = this;
        });
        $("#form1").submit(function (e) {
            if (ploopButton !== null) {
                ploopButton = null;
                return confirm('are u sure?');
            }
            return true;
        });
    });
</script>
<form id="form1" runat="server">
    <asp:Button ID="ploop" Text="ploop" runat="server" OnClick="ploop_Click" />
</form>

基本上,您将使用一个全局标志来指示单击了哪个按钮,并且您将在标志打开时确认表单提交

于 2012-08-10T00:21:08.860 回答