2017-01-29 113 views
0

我遇到麻煩讓JQuery blockUI工作。我使用此代碼:JQuery blockUI不起作用,除非我首先顯示警告

$.blockUI({ 
    message : null, 
    overlayCSS : { 
     backgroundColor : '#000000;', 
     opacity : .4 
    } 
}); 

如果我只是調用上面,然後調用休眠功能之下,我得到以下行爲: 什麼也沒有發生,持續5秒 塊閃爍

var start = new Date().getTime(); 
for (var i = 0; i < 1e7; i++) { 
    if ((new Date().getTime() - start) > 5000) { 
     break; 
    } 
} 

如果我運行此代碼:

alert("foo"); 
$.blockUI({ 
    message : null, 
    overlayCSS : { 
     backgroundColor : '#000000;', 
     opacity : .4 
    } 
}); 
var start = new Date().getTime(); 
for (var i = 0; i < 1e7; i++) { 
    if ((new Date().getTime() - start) > 5000) { 
     break; 
    } 
} 
alert("bar"); 

我得到以下行爲:

  • 警報和塊出現(我可以無限期地等待一段時間再清除警報)

  • 當我清除警報按鈕,沒有任何反應,持續5秒

  • 警報切換到「吧「消息

  • 報警和阻斷清楚,當我解除警報

+0

因爲for循環將鎖定的頁面,什麼都不會跑......這是一個壞理念。 – epascarello

+0

從你所說的聽起來好像有一個由jquery blockUI方法啓動的線程,當我的「睡眠」代碼執行時沒有機會完成。有沒有辦法可以重新編寫睡眠代碼,以便它只暫停當前線程並讓後臺線程繼續並繪製阻止窗格? – John

回答

0

我結束了移動互動的「睡眠」部分服務器,並使用這樣的事情在客戶端上:

<header> 
    <script language="javascript"> 
     function blockExample() { 
      // block the ui 
      $.blockUI({ 
       message : null, 
       overlayCSS : { 
        backgroundColor : '#00f' 
       } 
      }); 
      // do the ajax call 
      $.ajax({ 
       url : "${home}/action/wait/WaitAction?howLong=5000", 
       type : "get", 
       success : function(data) { 
        $.unblockUI(); 
       }, 
       error : function() { 
        alert("error"); 
       } 
      }); 
     } 
    </script> 
</header> 

<div align="center"> 
    <a href="javascript:blockExample()">Click me to block this page for 5 seconds</a> 
</div>