我的asp.net mvc 3 Web应用程序中有以下脚本,当用户点击它们时禁用所有提交按钮,以防止连续提交相同的数据:
$(document).ready(function () {
$("input[type='submit']").click(function () {
$(this).prop('disabled', true);
});
});
上述脚本工作正常,但禁用“搜索”等提交按钮会阻止用户执行其他搜索,除非他们刷新页面。
所以我想我是否可以修改我的脚本以在2秒之后重新启用提交按钮。
我厌倦了使用delay()
,但它没有用。
所以我有以下问题:
我的方法是否适用于定义延迟时间?
如何定义延迟时间然后重新启用按钮。
答案 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调用并利用其回调函数确切地知道从服务器返回响应的时间。
$.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
类的所有元素。
参考文献 -
filter()
- http://api.jquery.com/filter/
说明:将匹配元素集合减少到与选择器匹配的元素...
答案 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方法,我认为这是解决此问题的最佳方法。