我想在特定时间禁用按钮。我怎么能这样做?
答案 0 :(得分:10)
由于这可能是您可能想重复的任务,我认为最好的方法是像这样扩展jQuery:
$.fn.timedDisable = function(time) {
if (time == null) { time = 5000; }
return $(this).each(function() {
$(this).attr('disabled', 'disabled');
var disabledElem = $(this);
setTimeout(function() {
disabledElem.removeAttr('disabled');
}, time);
});
};
这将允许您在一组匹配的元素上调用函数,这将临时禁用它们。在编写时,您只需调用该函数,所选元素将被禁用5秒。你会这样做:
$('#some-button').timedDisable();
您可以通过更改以下行中的5000
来调整默认时间设置:
if (time == null) { time = 5000; }
您可以选择传递时间值(以毫秒为单位)来控制元素的禁用时间。例如:
$('#some-button').timedDisable(1000);
这是一个有效的演示:http://jsfiddle.net/fG2ES/
答案 1 :(得分:9)
禁用该按钮,然后使用setTimeout运行一个在几秒钟后启用该按钮的功能。
$('#some-button').attr("disabled", "disabled");
setTimeout('enableButton()', 5000);
function enableButton(){
$('#some-button').removeAttr('disabled');
}
答案 2 :(得分:2)
试试这个。
(function(){
$('button').on('click',function(){
var $this=$(this);
$this
.attr('disabled','disabled');
setTimeout(function() {
$this.removeAttr('disabled');
}, 3000);
});
})();
找到一个有效的例子
答案 3 :(得分:1)
可能不是最优雅的解决方案,但我想我会在这个上玩jQuery队列......
$.fn.disableFor = function (time) {
var el = this, qname = 'disqueue';
el.queue(qname, function () {
el.attr('disabled', 'disabled');
setTimeout( function () {
el.dequeue(qname);
}, time || 3000);
})
.queue(qname, function () {
el.removeAttr('disabled');
})
.dequeue(qname);
};
$('#btn').click( function () {
$(this).disableFor(2000);
});
这是我解决的问题...... http://jsfiddle.net/T9QJM/
并且,作为参考,How do I chain or queue custom functions using JQuery?