2013-03-04 60 views
1

我有这种形式的条件,发布数据前提醒验证错误。问题是如果有人双击(可能错误),表单被提交,然后第一次点击清除表单,然后第二次点击将提醒“表单为空”,这可能会造成混淆,因为它全部发生在瞬间。所以我想要的是当点击3秒时暂时禁用按钮。但我现在只是将整个功能暂停3秒,而不是关闭按钮。我应该怎么做?这里是表单的简化版本。由于禁用按钮超时

$('#send').click(function(){ 

    var self = $('#send'); 
     setTimeout(function() { 
     self.disabled = false; 
    if(!$('#text').val()){ 
     alert('field empty'); 
    }else{ 
     $('#message').html('done'); 
     $('#text').val(''); 
    } 
    }, 3000); 
}); 
+0

何不首次点击后,禁用按钮? – 2013-03-04 17:20:31

+0

这就是我想要的,但也许我做错了 – user2014429 2013-03-04 17:23:21

回答

4

我写了一个小例子对你来说,禁止在点击一个按钮。超时将在3000毫秒后启用按钮。

Working demo

HTML:

<input id="text"> 
<input id="send" type="button" value="send"/> 
<div id="message"></div> 

的Javascript:

$('#send').click(function(){ 
    var button = $(this); 
    button.attr('disabled', 'disabled'); 
    setTimeout(function() { 
     button.removeAttr('disabled'); 
    },3000); 
    if(!$('#text').val()){ 
     alert('field empty'); 
     button.removeAttr('disabled'); 
    }else{ 
     $('#message').html('done'); 
     $('#text').val(''); 
    } 
}); 
+0

完美,测试和工作很好。谢谢你的jsfiddle :) – user2014429 2013-03-04 17:32:55

+0

谢谢! - 我添加了你的所有代码的完整示例:) – 2013-03-04 17:34:17

2

你可以使用jQuery的one(),而不是click()。一旦该功能运行,它将被解除绑定。
如果你想重新启用它,你可以把超时重新绑定在函数的末尾。

用你的方法,它看起来像你从来没有真正禁用按钮:

this.disabled = 'disabled'; 
+0

,这似乎是很好的解决方案,我会研究它,谢谢 – user2014429 2013-03-04 17:26:48

2

你是不是正确禁用按钮。您正在设置jQuery对象上的.disabled属性,而不是包装的DOM元素。

尝试:

self.prop('disabled', false); 

相反的:

self.disabled = false; 

编辑:

其实上面的代码试图重新ebable按钮。没有代码禁用该按钮。

我也认为你想马上进行验证。到setTimeout()调用应该仅仅是重新启用按钮,如下所示:

$('#send').click(function() { 
    var self = $(this); 

    // Disable the button. 
    self.prop('disabled', true); 

    // Process click. 
    if (!$('#text').val()) { 
     alert('field empty'); 
    } else { 
     $('#message').html('done'); 
     $('#text').val(''); 
    } 

    // Cause the button to re-enable after 3 seconds. 
    setTimeout(function() { 
     self.prop('disabled', false); 
    }, 3000); 
}); 
+0

非常感谢您的代码,花花公子 – user2014429 2013-03-04 17:36:18