2013-10-09 171 views
1

我試圖讓我的腳本顯示,而我的腳本在後臺運行,但它似乎是警報停止網站上的所有內容。有什麼方法可以防止這種情況發生,並在警報顯示時使腳本運行?功能:我想,而警報顯示運行function jobbig() { alert("JOBBIGT"); }
代碼:`警報停止腳本

 } 
    function changez() { 
    if(y == 1) { 
     colour = "red"; 
     y = 2; 
     } 
     else if(y == 2) 
     { 
     colour = "green"; 
     y = 3; 
     } 
     else if(y == 3) 
     { 
     colour = "black"; 
     y = 4; 
     } 
     else if(y == 4) 
     { 
     colour = "yellow"; 
     y = 5; 
     } 
     else if(y == 5) 
     { 
     colour = "cyan"; 
     y = 6; 
     } 
     else if(y == 6) 
     { 
     colour = "white"; 
     y = 1; 
     } 

document.getElementById("head").style.color = colour; 
}` 


function change() { 
     if(x == 1) { 
     color = "black"; 
     x = 2; 
     } 
     else if(x == 2) 
     { 
     color = "white"; 
     x = 3; 
     } 
     else if(x == 3) 
     { 
     color = "yellow"; 
     x = 4; 
     } 
     else if(x == 4) 
     { 
     color = "red"; 
     x = 5; 
     } 
     else if(x == 5) 
     { 
     color = "green"; 
     x = 6; 
     } 
     else if(x == 6) 
     { 
     color = "cyan"; 
     x = 7; 
     } 
     else if(x == 7) 
     { 
     color = "purple"; 
     x = 1; 
     } 
     else if(x == 1337) 
     { 
     color = "white"; 
     } 
document.body.style.background = color; } 


代碼由function andrafarg30() { clearInterval(interval2); clearInterval(interval3); clearInterval(intervall2); clearInterval(intervall3); x = 1; y = 1; interval1 = setInterval(change, 30); intervall1 = setInterval(changez, 45); }這是由一個按鈕叫跑。警報也被一個按鈕調用。

回答

0

使用jQuery UI Dialog組件與modal: true選項而不是Window.alert函數。

執行以下操作:

  1. 把參考jQuery用戶界面給你的頭 <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>後現場 的jquery.js inlude。

  2. 變化function jobbig() { alert("JOBBIGT"); }function jobbig() { var tag = $('<div>JOBBIGT</div>'); tag.dialog({modal: true}); }

如果您需要以某種方式自定義對話框,請參閱demo

+0

我不是很熟悉jQuery,所以我不知道如何用我自己的代碼進行編譯。 – Grymfogel1

+0

請檢查我最新的答案。 –

0

使用非阻塞alert可能是一個壞主意,尤其是在循環中,但是可能的。實現這一目標最簡單的方法就是通過別的東西,是非阻塞你爲什麼不考慮console.log,而不是運行它,例如setTimeout

function makeNonBlocking(func, context) { 
    if (!context) context = null; 
    return function() { 
     var args = arguments; 
     setTimeout(function() {func.apply(context, args)}, 0); 
    }; 
} 
var myAlert = makeNonBlocking(alert); 

myAlert('foo'); 
console.log('bar'); // appears before user okays `foo` alert 
myAlert('baz'); 

有關係嗎?

+0

我不明白你在代碼中做了什麼,有人可以解釋嗎?謝謝 – Grymfogel1

+0

我試圖儘可能通用; 'makeNonBlocking'是一個_function_,它返回一個新的_function_。新的_function_包裝作爲「makeNonBlocking」的第一個參數給出的_function_,並通過'setTimeout'調用它。我使用['apply'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)來傳遞所有傳遞給新_function_的'arguments'。然後我用'alert'調用'makeNonBlocking'來生成一個非阻塞版本的'alert',我繼續使用它。 –

+0

如果你明白了接下來的所有內容,如果你正在改變'this',你可能還需要更多邏輯來處理'context',並且在'var args'的同時捕獲'this'。 –