2010-09-06 17 views

उत्तर

9

बटन को अक्षम करें और फिर एक फ़ंक्शन चलाने के लिए setTimeout का उपयोग करें जो कुछ सेकंड के बाद बटन को सक्षम बनाता है।

$('#some-button').attr("disabled", "disabled"); 
setTimeout('enableButton()', 5000); 

function enableButton(){ 
    $('#some-button').removeAttr('disabled'); 
} 
+0

यह काम नहीं करता पा सकते हैं। – Ender

+2

@Ender यह काम नहीं करता है क्योंकि आपका 'सक्षम बटन' फ़ंक्शन वैश्विक दायरे में नहीं है जिसे * way * 'setTimeout' द्वारा आवश्यक है। इसे देखें: http://jsfiddle.net/RPQmM/1/ –

9

चूंकि यह एक काम आप को दोहराने के लिए पसंद कर सकते हैं होने की संभावना है, मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका की तरह 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

सबसे सुरुचिपूर्ण समाधान नहीं हो सकता है, लेकिन मुझे लगता है मैं इस पर 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?

2

इसे आजमाएं। http://jsfiddle.net/RPQmM/ मेरा मानना ​​है कि setTimeout गलत कहा जाता है:

(function(){ 
$('button').on('click',function(){ 
var $this=$(this); 
     $this 
      .attr('disabled','disabled'); 
      setTimeout(function() { 
      $this.removeAttr('disabled'); 
      }, 3000); 
     }); 
})(); 

आपके पास चालू उदाहरण यहाँ http://jsfiddle.net/informativejavascript/AMqb5/

संबंधित मुद्दे