2011-06-11 86 views
2

我有一個奇怪的需求。我想這樣做在JavaScript如下:我可以做更多讓JavaScript一次做兩件事嗎?

  1. 當一個函數被調用我想 改變DIV的顏色和 然後1/2秒後,我想 改回來
  2. 同時(1)我會 喜歡做一個Ajax調用。電話 通常需要一秒

換句話說,我想步驟1和步驟2在同一時間開始。

我對javascript的知識很基礎。這種事情可能嗎?如果我使用jQuery,那會更容易嗎?

+2

這聽起來像是可能有更好的方法來實現您的目標。你希望#1跑步的準確時間是#2的一半嗎?整個時間?兩者在你的應用邏輯方面有什麼關係? – glortho 2011-06-11 18:49:47

+0

如果您希望div在AJAX調用返回後更改回原始顏色,請將其顏色改回AJAX請求的回調函數中。 – Triptych 2011-06-11 19:32:04

+0

請問你能否重寫請問你的問題,因爲它似乎不似乎英文有效?還是做?更多? – regilero 2011-06-11 19:36:01

回答

2

您可以使用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 
}); 
0

AJAX的目的是進行異步調用。如果您希望它們稍後執行,您可以使用setTimeout()setInterval()執行功能。

2

我爲您創建了第一部分。它將顏色設置爲藍色,然後在半秒後回到紅色(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 

}); 
+0

感謝您的腳本。我曾嘗試過類似的方法,但不確定函數的確切語法()。我有個問題。將超時設置爲5000時,延遲時間大約爲5秒。當設置爲10時,它至少延遲了至少一秒。關於這是爲什麼的任何想法? – Marife 2011-06-11 19:29:13

+0

@Marife時間應該是準確的。我將它設置爲10毫秒,速度非常快,我看不到變化。 – wdm 2011-06-11 19:32:14

0

一個重要的概念是,JavaScript是一種單線程的事情。只有一件事情真的發生,沒有平行的任務。

這是一個nice tutorial爲了獲得這一點的細節。

現在,這並不意味着JavaScript執行似乎是最終用戶的單線程。你有大量的異步ajax調用和基於定時器的事件(比如動畫中使用的jQuery隊列)的工具,這些工具會使javascript作業中斷。這意味着工作將逐步完成,對於多個圖形區域,您將得到最終的印象,並行完成。

這就是爲什麼@Shef答案是正確的,以及@ anirudh4444之一。

相關問題