我认为我在同一个按钮上多次点击时遇到问题。我以为我解决了它,但我认为有2个问题不是我认为的原始问题。
第一个问题是,如果他们点击了一个按钮(比如一个保存按钮),就会有很多人保存ajax帖子。
因此,如果他们点击它5次,因为他们不耐烦它会节省5倍,在某些情况下会使服务器崩溃,但大多数时候只是做出了奇怪的结果。所以我找到了一个很棒的插件来确保无法做出重复的请求,我认为问题已经解决了。
但是我有一些按钮,你点击它,它会产生一个jquery ui对话框,我相信,如果你点击该按钮5次,它会弄乱对话框。就像它没有制作5个对话框但我注意到表格中的控件不会突然发挥作用。
因此,如果我只是单击一个按钮并创建对话框就可以了。如果在对话框完成渲染之前单击按钮5次,我不再看到验证错误,有时它中的日期选择器就消失了。
它不起作用。
所以我认为我需要一些东西来阻止这种大规模点击,所以我想到当点击一个按钮时所有按钮都被禁用,直到它完成加载任何东西。我不确定这是否是最佳方式,这就是我要问的原因。
我也不确定在哪里放置代码。将它放在一个全球范围内或其他什么东西会很棒,所以我不必把它放在每个方法中。
由于
答案 0 :(得分:5)
您可以在首次点击后停用提交按钮
$("#submit").click(function() {
$.ajax("url/to/file.php", data);
$(this).attr("disabled", "true");
});
你还可以使用jquery ajax中的async选项在加载ajax时阻止页面
$.ajax({
url: "url/to/file.php",
async: false,
data: data
});
答案 1 :(得分:0)
有无数种方法可以做到这一点。我更像是一个核心的javascript人,但总的想法是获得所有能够触发ajax调用并禁用它们的元素。
确切的代码取决于您是否有一个包含多个“提交”类型的输入元素的单个表单,按钮元素,或者您是否有多个表单。
jQuery有一个each()方法,您可以使用。
迭代数组/对象非jQuery解决方案可能如下所示:
function enableButtons() {
var buttons = document.getElementsByTagName("button");
for (var i=0; i<buttons.length; i++) {
buttons.disabled = false;
}
}
function disableButtons() {
var buttons = document.getElementsByTagName("button");
for (var i=0; i<buttons.length; i++) {
buttons.disabled = true;
}
}
答案 2 :(得分:0)