怎么阻止这个?使用jquery多次点击按钮?

时间:2010-07-05 20:09:17

标签: jquery jquery-ui

我认为我在同一个按钮上多次点击时遇到问题。我以为我解决了它,但我认为有2个问题不是我认为的原始问题。

第一个问题是,如果他们点击了一个按钮(比如一个保存按钮),就会有很多人保存ajax帖子。

因此,如果他们点击它5次,因为他们不耐烦它会节省5倍,在某些情况下会使服务器崩溃,但大多数时候只是做出了奇怪的结果。所以我找到了一个很棒的插件来确保无法做出重复的请求,我认为问题已经解决了。

但是我有一些按钮,你点击它,它会产生一个jquery ui对话框,我相信,如果你点击该按钮5次,它会弄乱对话框。就像它没有制作5个对话框但我注意到表格中的控件不会突然发挥作用。

因此,如果我只是单击一个按钮并创建对话框就可以了。如果在对话框完成渲染之前单击按钮5次,我不再看到验证错误,有时它中的日期选择器就消失了。

它不起作用。

所以我认为我需要一些东西来阻止这种大规模点击,所以我想到当点击一个按钮时所有按钮都被禁用,直到它完成加载任何东西。我不确定这是否是最佳方式,这就是我要问的原因。

我也不确定在哪里放置代码。将它放在一个全球范围内或其他什么东西会很棒,所以我不必把它放在每个方法中。

由于

3 个答案:

答案 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)

有一个jQuery插件,旨在帮助防止用户点击干扰,同时进行特定处理:

  malsup

BlockUI

(补充阅读:article about BlockUI