Asp.net 如何禁用页面上的所有按钮和链接,但仍允许回发?

Asp.net 如何禁用页面上的所有按钮和链接,但仍允许回发?,asp.net,jquery,user-interface,dhtml,Asp.net,Jquery,User Interface,Dhtml,我试图阻止用户在页面上单击多个导致回发的元素。换句话说,如果他们单击“继续”提交按钮,在原始请求返回之前,他们不应该能够导致另一次回发 我尝试了两个版本的jQuery代码。也不是我想要的: 此版本将禁用所有回发元素,但这样做会阻止单击的元素触发。作为记录,我不认为真正需要.removeAttr('onclick'),但忽略它似乎不会改变行为 $(function() { $('a, :button, :submit').click(function() { var ele

我试图阻止用户在页面上单击多个导致回发的元素。换句话说,如果他们单击“继续”提交按钮,在原始请求返回之前,他们不应该能够导致另一次回发

我尝试了两个版本的jQuery代码。也不是我想要的:

此版本将禁用所有回发元素,但这样做会阻止单击的元素触发。作为记录,我不认为真正需要
.removeAttr('onclick')
,但忽略它似乎不会改变行为

$(function() {
    $('a, :button, :submit').click(function() {
        var elements = $('a, :button, :submit');
        elements.attr('disabled', 'disabled').removeAttr('onclick');
    });
});
这个版本禁用了所有其他的回发元素,但是它允许我重复使用被点击的相同元素——我不想两次点击相同的按钮

$(function() {
    $('a, :button, :submit').click(function() {
        var otherelements = $('a:not(#' + $(this).attr('id') + '), :button:not(#' + $(this).attr('id') + '), :submit:not(#' + $(this).attr('id') + ')');
        elements.attr('disabled', 'disabled').removeAttr('onclick');
    });
});

如何防止这种行为?

也许您可以设置一个标志或其他东西,它可以记住单击的按钮,如果该标志存在,您可以删除导致回发的元素上的onclick事件。但我认为这不能仅在客户端脚本中完成,因为一旦提交页面,所有客户端元素和脚本都会被刷新。

也许您可以设置一个标志或一些可以记住单击了哪个按钮的内容,如果该标志存在,您可以删除导致回发的元素上的onclick事件。但我认为这不能仅在客户端脚本中完成,因为一旦提交页面,所有客户端元素和脚本都将刷新。

可能不是将其设置为单击函数,而是将其设置为onmouseup,以便在单击事件发生后激发。

可能不是将其设置为单击函数,而是将其设置为onmouseup,以便在单击事件发生后激发。

我刚刚测试了第一种不使用JQuery的方法,它工作正常,即禁用提交按钮并不能阻止表单提交

<form method="get">
  <input type="text" name="textfield" value="a" />
  <input type="submit" onclick="this.disabled=true">
</form>


也许您想再次检查是否还有其他问题,例如JQuery,正在进行吗?

我刚刚测试了您的第一种没有JQuery的方法,效果很好,即禁用submit按钮不会阻止表单提交

<form method="get">
  <input type="text" name="textfield" value="a" />
  <input type="submit" onclick="this.disabled=true">
</form>


也许您想再次检查是否还有其他事情,例如JQuery,正在进行?

这里是一个最终版本,它起作用了-只是覆盖表单提交事件,而不是查看任何单个元素

var submitted = false;
$(function() {
    $('form').bind('submit', function() {
        if (!submitted) {
            submitted = true;
            return true;
        } else {
            return false;
        }
    });
});

谢谢大家的建议。

这是一个最终版本,它可以正常工作-只需覆盖表单提交事件,而不必查看任何单个元素

var submitted = false;
$(function() {
    $('form').bind('submit', function() {
        if (!submitted) {
            submitted = true;
            return true;
        } else {
            return false;
        }
    });
});

谢谢大家的建议。

我对你的第二种方法感到困惑。。。一些输入错误?不,没有输入错误-这只是一种(可能效率低下)获取所有锚、按钮和提交按钮的方法,除了已触发的按钮。我对你的第二种方法感到困惑。。。一些输入错误?不,没有输入错误-这只是一种(可能效率低下)获取所有锚、按钮和提交按钮的方法,除了已触发的按钮。有趣的。。。我试试看。唯一的问题可能是使用enter键触发提交。很有趣。。。我试试看。唯一的问题可能是使用enter键触发提交。我对此也有点困惑。问题是,如果我删除上面的jQuery,一切都会正常工作(但我可以进行双重回发)。我想知道设置一个禁用的属性是否会影响服务器端发生的事情?我不这么认为。如果您只想确保用户不会意外地进行双重提交,您可以在整个页面上创建一个(半透明)层,并使用适当的z索引和定位css属性。我想您可以尝试的另一件事是在onsubmit事件中禁用元素。我也有点困惑。问题是,如果我删除上面的jQuery,一切都会正常工作(但我可以进行双重回发)。我想知道设置一个禁用的属性是否会影响服务器端发生的事情?我不这么认为。如果您只想确保用户不会意外地进行双重提交,只需在整个页面上设置一个(半透明)层,使用适当的z-index和position css属性。我想你可以尝试的另一件事是在onsubmit事件中禁用元素。我已经尝试过这个建议,到目前为止似乎还有效。。。我会随时通知你的。我已经尝试过这个建议,到目前为止似乎有效。。。我会通知你的。