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

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

我有两个版本的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'); }); }); 

我该如何防止这种行为?

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

 

也许你想仔细检查是否有其他东西,例如JQuery,还在继续?

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

也许不是让它成为一个点击function,而是让它成为onmouseup,以便在点击事件发生后触发。

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

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

谢谢大家的建议。