我有一个奇怪的需求。我想这样做在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