2011-06-11 35 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之一。

相关问题