2010-09-06 7 views

Répondre

9

Désactivez le bouton, puis utilisez setTimeout pour exécuter une fonction qui active le bouton après quelques secondes.

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

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

Cela ne fonctionne pas: http://jsfiddle.net/RPQmM/ Je crois que le setTimeout est appelé tort. – Ender

+2

@Ender Cela ne fonctionne pas parce que votre fonction 'enableButton' n'est pas dans la portée globale qui est requise par le * way *' setTimeout' est appelé. Voir ceci: http://jsfiddle.net/RPQmM/1/ –

9

Comme il est susceptible d'être une tâche que vous voudrez peut-être répéter, je pense que la meilleure façon de le faire serait d'étendre jQuery comme ceci:

$.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); 
    }); 
}; 

Cela vous permettra d'appeler une fonction sur un ensemble d'éléments correspondants qui les désactivera temporairement. Comme il est écrit, vous pouvez simplement appeler la fonction, et les éléments sélectionnés seront désactivés pendant 5 secondes. Vous faire comme ceci:

$('#some-button').timedDisable(); 

Vous pouvez régler le réglage de l'heure par défaut en modifiant la 5000 dans la ligne suivante:

if (time == null) { time = 5000; } 

Vous pouvez éventuellement passer une valeur de temps en millisecondes pour contrôler la longtemps les éléments seront désactivés pour. Par exemple:

$('#some-button').timedDisable(1000); 

Voici une démonstration de travail: http://jsfiddle.net/fG2ES/

1

peut-être pas la solution la plus élégante, mais je pensais que je jouerais avec les files d'attente jQuery sur celui-ci ...

​$.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);​​​​ 
}); 

C'est là que je travaillais dehors ... http://jsfiddle.net/T9QJM/

Et, pour référence, How do I chain or queue custom functions using JQuery?

2

Essayez ceci.

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

Vous pouvez trouver un exemple de travail ici http://jsfiddle.net/informativejavascript/AMqb5/

Questions connexes