如何禁用所有提交按钮,然后重新启用特定按钮?

时间:2012-05-06 15:59:52

标签: jquery

我的asp.net mvc 3 Web应用程序中有以下脚本,当用户点击它们时禁用所有提交按钮,以防止连续提交相同的数据:

$(document).ready(function () {
    $("input[type='submit']").click(function () {
        $(this).prop('disabled', true);
    });
});

上述脚本工作正常,但禁用“搜索”等提交按钮会阻止用户执行其他搜索,除非他们刷新页面。 所以我想我是否可以修改我的脚本以在2秒之后重新启用提交按钮。 我厌倦了使用delay(),但它没有用。

所以我有以下问题:

  1. 我的方法是否适用于定义延迟时间?

  2. 如何定义延迟时间然后重新启用按钮。

3 个答案:

答案 0 :(得分:2)

$("input[type='submit']").click(function () {
        var $this = $(this);
        $this.prop('disabled', true);
        setTimeout(function() {
          $this.prop('disabled', false);
        },2000);
    });

DEMO

答案 1 :(得分:1)

我不同意你决定的2秒延迟。如果通话时间超过2秒怎么办?我们并不是所有人都幸运拥有高速宽带连接。 :) 几乎所有关于网络延迟的假设都是危险的。

更好的方法是使用AJAX调用并利用其回调函数确切地知道从服务器返回响应的时间。

  

取消 - http://api.jquery.com/jQuery.ajax/

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});

您可以尝试将特定类添加到要禁用的所有提交按钮。像.canDisable这样的东西,然后当你禁用所有提交按钮时,你可以指定一个额外的选择器来精确地 你想要禁用的按钮

$(document).ready(function () {
    $("input[type='submit']").filter(".canDisable").click(function () {
        $(this).prop('disabled', true);
    });
});

我正在使用.filter()函数过滤掉包含.canDisable类的所有元素。


参考文献 -

答案 2 :(得分:0)

我对这个问题的想法是,在不想禁用的输入上设置属性“ nodisable”,然后禁用如下字段:

$("input[type='submit']:not([nodisable])").prop("disabled", true);

<input type="submit">将被禁用,<input type="submit" nodisable>不会被禁用。

启用也可以与此一起使用: $("input[type='submit']").prop("disabled", false);

结合ajax方法,我认为这是解决此问题的最佳方法。