2014-07-25 54 views
0

我想在我運行setInterval時禁用我的html的某些部分,並在setInterval完成後再次返回。暫時在setInterval運行時禁用DIV

How is it?

<div id="on">CLICK THIS : <span id="status">ENABLED</span></div> 
<button id="run">LOAD</button 

$('#run').on('click', function() { 
    var i = 0; 
    var go = setInterval(function() { 
     i++; 
     $('#run').html('Loading ' + i + ' or 10...'); 
     $('#status').html('DISABLED'); 
     $('#on').unbind('click keyup keypress keydown'); 
     if (i === 10) { 
      clearInterval(go); 
      $('#status').html('ENABLED'); 
      $('#run').html('DONE'); 
     } 
    }, 1000); 
}); 

$('#on').on('click', function() { 
    $('#status').html('CLICKING'); 
}); 

在這裏,我想達到什麼樣的是,當我點擊Loading Button直到加載完成的Click This不應該接受任何點擊事件。但點擊仍然被觸發。有沒有其他方法可以做到這一點?

[和我不想使用禁用=「禁用」]

+0

那麼你需要做的是解除對文件 –

+0

沒有文件,對不起,我只是更新鏈接 – Vainglory07

回答

1

如果你不想click事件觸發回調解除綁定事件或設置在回調確認的標誌。您還正在做的解除綁定的回調中,所以直到它被稱爲首次

$('#run').on('click', function() { 
    var i = 0; 
    $('#status').html('DISABLED'); 
    $("#on").unbind('click keyup keypress keydown'); 
    var go = setInterval(function() { 
     i++; 
     $('#run').html('Loading ' + i + ' or 10...'); 
     if (i === 10) { 
      clearInterval(go); 
      $('#status').html('ENABLED'); 
      $('#run').html('DONE'); 
      $("#on").on("click",onDivClicked); 
     } 
    }, 1000); 
}); 

$('#on').on('click', onDivClicked); 

function onDivClicked(){ 
    $('#status').html('CLICKING'); 
} 

或設置標誌

$('#on').data("active",true); 
$('#run').on('click', function() { 
    var i = 0; 
    $('#status').html('DISABLED'); 
    $("#on").data("active",false); 
    var go = setInterval(function() { 
     i++; 
     $('#run').html('Loading ' + i + ' or 10...'); 
     if (i === 10) { 
      clearInterval(go); 
      $('#status').html('ENABLED'); 
      $('#run').html('DONE'); 
      $("#on").data("active",true); 
     } 
    }, 1000); 
}); 

$('#on').on('click', function() { 
    if(!$(this).data("active")) return; 
    $('#status').html('CLICKING'); 
}); 
+0

即時通訊不是js親。我可否知道什麼是回報;手段?它是否返回false? – Vainglory07

+0

它什麼也沒有返回,它只是告訴函數現在退出 –

+0

哇:D現在我知道了。生病得到第二個。謝謝 – Vainglory07

0

demo

$('#run').on('click', function() { 
    var i = 0; 
    var go = setInterval(function() { 
     i++; 
     $('#on').attr("running","true"); 
     $('#run').html('Loading ' + i + ' or 10...'); 
     $('#status').html('DISABLED'); 
     if (i === 10) { 
      clearInterval(go); 
      $('#status').html('ENABLED'); 
      $('#run').html('DONE'); 
      $('#on').removeAttr("running"); 
     } 
    }, 1000); 
}); 

$('#on').on('click', function() { 
    var running = $(this).attr('running'); 

    if (typeof running !== typeof undefined && running !== false) { 

    } 
    else{ 
     $('#status').html('CLICKING'); 
    } 
}); 
+0

您正在設置setInterval回調中的屬性,該事件將一直處於活動狀態,直到執行第一個時間間隔。 –

0

事件將不會被綁定也許這有幫助

function foo(){ 
     var i = 0; 
     $('#on').off('click', foo); 
     var go = setInterval(function() { 
      i++; 
      $('#run').html('Loading ' + i + ' or 10...'); 
      $('#status').html('DISABLED'); 
      $(document).unbind('click keyup keypress keydown'); 
      if (i === 10) { 
       clearInterval(go); 
       $('#on').on('click', foo); 
       $('#status').html('ENABLED'); 
       $('#run').html('DONE');  
      } 
     } 

    $('#on').on('click', foo);