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

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

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

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

所以我有以下问题:

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

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

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

DEMO

我不同意你决定的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这样的.canDisable ,然后当你禁用所有提交按钮时,你可以指定一个额外的选择器来精确地指向你想要禁用的按钮。

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

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


参考文献 –

描述:将匹配元素集减少到与选择器匹配的元素集…