我有一個奇怪的需求。我想這樣做在JavaScript如下:我可以做更多讓JavaScript一次做兩件事嗎?
- 當一個函數被調用我想 改變DIV的顏色和 然後1/2秒後,我想 改回來
- 同時(1)我會 喜歡做一個Ajax調用。電話 通常需要一秒
換句話說,我想步驟1和步驟2在同一時間開始。
我對javascript的知識很基礎。這種事情可能嗎?如果我使用jQuery,那會更容易嗎?
我有一個奇怪的需求。我想這樣做在JavaScript如下:我可以做更多讓JavaScript一次做兩件事嗎?
換句話說,我想步驟1和步驟2在同一時間開始。
我對javascript的知識很基礎。這種事情可能嗎?如果我使用jQuery,那會更容易嗎?
您可以使用jQuery和它的功能queue
,推遲行動。
我在jsFiddle上分出了wdm的版本,把它改爲queue
樣式,而不是setTimeout
。我個人認爲,這是一種更加清潔和更好的方式來實現你正在尋找的東西。
下面是forked Demo
下面是JavaScript代碼:
$('#change').click(function(e) {
e.preventDefault();
$('#a')
.css('background-color', 'blue')
.delay(500)
.queue(function(next){
$(this).css('background-color', 'red');
next();
});
$.ajax({}); // do the ajax call here
});
AJAX的目的是進行異步調用。如果您希望它們稍後執行,您可以使用setTimeout()
和setInterval()
執行功能。
我爲您創建了第一部分。它將顏色設置爲藍色,然後在半秒後回到紅色(500毫秒)。
然後,您可以添加我有評論的ajax請求的代碼。顏色變化和ajax調用將在函數調用的同時開始。
演示:http://jsfiddle.net/wdm954/H39XZ/1/
$('#change').click(function(e) {
e.preventDefault();
$('#a').css('background-color', 'blue');
setTimeout(function() {
$('#a').css('background-color', 'red');
}, 500);
// Insert ajax call here
});
一個重要的概念是,JavaScript是一種單線程的事情。只有一件事情真的發生,沒有平行的任務。
這是一個nice tutorial爲了獲得這一點的細節。
現在,這並不意味着JavaScript執行似乎是最終用戶的單線程。你有大量的異步ajax調用和基於定時器的事件(比如動畫中使用的jQuery隊列)的工具,這些工具會使javascript作業中斷。這意味着工作將逐步完成,對於多個圖形區域,您將得到最終的印象,並行完成。
這就是爲什麼@Shef答案是正確的,以及@ anirudh4444之一。
這聽起來像是可能有更好的方法來實現您的目標。你希望#1跑步的準確時間是#2的一半嗎?整個時間?兩者在你的應用邏輯方面有什麼關係? – glortho 2011-06-11 18:49:47
如果您希望div在AJAX調用返回後更改回原始顏色,請將其顏色改回AJAX請求的回調函數中。 – Triptych 2011-06-11 19:32:04
請問你能否重寫請問你的問題,因爲它似乎不似乎英文有效?還是做?更多? – regilero 2011-06-11 19:36:01