我正在尝试阻止用户点击页面上多个引发回发的元素。换句话说,如果他们点击“继续”提交按钮,他们就不应该在原始请求回来之前引起另一次回发。
我已经使用了两个版本的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');
});
});
如何防止此行为?
答案 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;
}
});
});
感谢大家的建议。