如何禁用所有提交按钮然后重新启用特定按钮?
我在我的asp.net mvc 3 Web应用程序中有以下脚本,当用户单击它们以禁止连续提交相同数据时,禁用所有提交按钮:
$(document).ready(function () { $("input[type='submit']").click(function () { $(this).prop('disabled', true); }); });
上述脚本工作正常,但禁用“搜索”等提交按钮将阻止用户执行其他搜索,除非他们刷新页面。 所以我想我是否可以修改我的脚本,在2秒之后重新启用提交按钮。 我厌倦了使用delay()
但它没有用。
所以我有以下问题:
-
我的方法是否适用于定义延迟时间?
-
我如何定义延迟时间然后重新启用按钮。
$("input[type='submit']").click(function () { var $this = $(this); $this.prop('disabled', true); setTimeout(function() { $this.prop('disabled', false); },2000); });
DEMO
我不同意你决定的2秒延迟。 如果通话时间超过2秒怎么办? 我们并不是所有人都幸运地拥有高速宽带连接。 :)几乎所有关于网络延迟的假设都是危险的。
更好的方法是使用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
类的所有元素。
参考文献 –
-
filter()
– http://api.jquery.com/filter/
描述:将匹配元素集减少到与选择器匹配的元素集…