如何禁用页面上的所有按钮和链接,但仍然会发生回发?

时间:2010-08-05 06:46:21

标签: asp.net jquery user-interface dhtml

我正在尝试阻止用户点击页面上多个引发回发的元素。换句话说,如果他们点击“继续”提交按钮,他们就不应该在原始请求回来之前引起另一次回发。

我已经使用了两个版本的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');
    });
});

如何防止此行为?

4 个答案:

答案 0 :(得分:2)

我刚刚在没有JQuery的情况下测试了你的第一种方法,并且它工作正常,即禁用提交按钮并不会阻止表单提交。

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

也许你想仔细检查是否还有其他事情,例如: JQuery,继续?

答案 1 :(得分:1)

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

答案 2 :(得分:0)

也许不是让它成为一个点击功能而是使它成为onmouseup,因此它会在点击事件发生后触发。

答案 3 :(得分:0)

这是一个有效的最终版本 - 只是覆盖表单提交事件而不是查看任何单个元素。

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

感谢大家的建议。