如何阻止?用jquery多次点击一个按钮?

问题描述:

我想我在同一个按钮上多次点击都有问题。我以为我解决了它,但我认为有两个问题,而不是我认为的原始问题。如何阻止?用jquery多次点击一个按钮?

的第一个问题是,如果他们点击一个按钮(比如保存按钮),它会做很多保存AJAX的职位。

所以,如果他们点击了5次,因为他们在那里不耐烦它会做一个保存5次在某些情况下,有什么可以使服务器崩溃,但大部分时间只是做奇怪的结果。所以我找到了一个很好的插件,以确保重复的请求无法做出,我认为问题解决了。

但是我有一些按钮,你点击它,它使一个jQuery UI的对话框,我相信,如果你那个按钮点击5次它搅乱了对话。喜欢它不会做5个对话框,但我注意到表单中的控件突然不起作用。

所以,如果我只需点击一个按钮,在对话框创建它工作正常。如果我在对话框完成渲染之前单击按钮5次,我不会再看到验证错误,有时候它中的日期选择器消失了。

它只是不起作用。

所以我想我需要一些东西来制止这种大规模点击,所以我在想,如果被点击一个按钮,所有按钮将被禁用,直到它完成加载了什么。我不知道这是否是最好的方式,这就是为什么我问。

我也不确定把代码放在哪里。将它放在一个全球性的地区或者其他地方是非常好的,所以我不必把它放在每一种方法中。

谢谢

有一个jQuery插件,旨在帮助防止用户点击干扰,而具体的处理发生:

BlockUI通过malsup

(附加阅读:article about BlockUI

+0

我真的很喜欢这个插件。希望它能解决我的问题。我会让你知道的。 – chobo2 2010-07-05 22:01:40

+0

好。请回过头来描述它是否以及如何解决问题,并将其中的答案标记为已接受。祝一切顺利。 – micahwittman 2010-07-06 03:20:42

这样做有无数的方法。我更多的是一个核心的JavaScript人,但总体思路是获得所有能够触发Ajax调用并禁用它们的元素。

准确的代码将取决于您是否拥有多个输入元素类型为'submit',按钮元素的单个表单或者是否有多个表单。

jQuery有它可以遍历与阵列/对象的每个()方法。

非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; 
    } 
} 
+0

那么一切都是按钮(因为jQuery UI对话框只能制作按钮)。所以没有提交按钮。 – chobo2 2010-07-05 21:00:06

您可以禁用提交按钮首次单击

$("#submit").click(function() { 
    $.ajax("url/to/file.php", data); 
    $(this).attr("disabled", "true"); 
}); 

后,您还可以使用async选项从jQuery的阿贾克斯阻止页面,而Ajax是被加载

$.ajax({ 
    url: "url/to/file.php", 
    async: false, 
    data: data 
});