2015-05-02 40 views
0

我有一个按钮,我想禁止发送调用jquery,而有一个功能“活跃”。在触发后禁用呼叫功能5秒钟

会发生什么是,每次用户点击按钮,计数器减1。然而,这会发生延迟,请参阅这里的步骤;

  • 点击按钮
  • 按钮被禁用
  • 5秒后反被一个和按钮变为减少到启用。

但是,现在的问题是,即使按钮被禁用,用户也可以点击X次,然后计数器在5秒后减少X次。

意味着电话仍然通过。

看到这里是我的尝试没有成功做到到目前为止,可惜..

$(document).ready(function() { 

    var enabled=true; 

    $(".myButton").click(function(){ 

     if(enabled = true) { 

     setTimeout(function(){ 
      var i = document.getElementById('counter2'); 
      i.innerHTML = parseInt(i.innerHTML)-1; 
      $('.progress-bar').css("width", '+=' + '35px'); 
      $(".myButton").attr('disabled','enabled'); 
      $('.myButton').css('opacity', '1'); 
      var enabled=true; 
     },5000) 
     $(".myButton").attr('disabled','disabled'); 
     $('.myButton').css('opacity', '0.5'); 
     var enabled=false; 

     } else { } 

    }); 
}); 
+3

我觉得你真的很接近,试图从所有,但第一个声明消除'var'第2行,您在新的功能范围定义具有相同名称的新变量('click'和'的setTimeout '回调) – Plato

+0

刚刚尝试过,但没有成功:(它继续做同样的事情(加起来的点击和减少所有的倒计时) – Snowlav

+1

如果enabled = true?...只是说...在继续阅读 – Masterakos

回答

2
if(enabled = true) { 
     ^

你的意思写在这里==。甚至更好:if (enabled)因为enabled是一个布尔无论如何。使用= true这里也是一项任务。并且由于true是真的,条件将总是评估为true

+0

是的,这是在超时后缺少分号的问题。 – Snowlav

2

我不认为你需要跟踪一个变量来监视按钮的状态,因为你已经设置了一个属性来表明它已被禁用。所以你可以使用该属性作为状态的一个指标。

此外,你正在做这种行为所有myButton的按钮。所以我把处理程序隔离到只是点击按钮的event.target

$(".myButton") 
    .prop('disabled',false) 
    .click(function(event){ 
     // get the button that was clicked. 
     var btn = $(event.target); 
     if(btn.prop('disabled') === true) { 
      // it's already disabled, nothing to do 
      return; 
     } 

     // start a 5 second timer 
     setTimeout(function(){ 
      var i = document.getElementById('counter2'); 
      i.innerHTML = parseInt(i.innerHTML)-1; 
      //$('.progress-bar').css("width", '+=' + '35px'); 
      // I've never seen += used like this ^^^ does it work? 
      var bar = $('.progress-bar'); 
      bar.css("width", (bar.width() + 35) + 'px'); 

      // after 5 seconds enable the button 
      btn.prop('disabled',false); 
      btn.css('opacity', '1'); 
     },5000); 

     // disable the button until timer expires. 
     btn.prop('disabled',true); 
     btn.css('opacity', '0.5'); 
    });