1

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

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

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

所以我有以下问题:

  1. 我的方法对定义延迟时间有效吗?

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

4

3 回答 3

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

演示

于 2012-05-06T16:01:14.847 回答
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该类的所有元素。


参考 -

于 2012-05-06T16:06:36.170 回答
0

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

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

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

启用也适用于此: $("input[type='submit']").prop("disabled", false);

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

于 2019-02-25T12:11:01.807 回答