Javascript 在一个循环中循环三个div-一些div没有改变
大家好!关于用户显示和javascript的快速问题。我要做的是关闭更新箭头gif,显示旋转箭头,执行更新,隐藏旋转箭头,最后显示表示此项已设置的gif 我的问题是旋转箭头从不显示。我把睡眠放在那里是因为我认为更新发生得太快了,以至于我没有看到它,但事实似乎并非如此 非常感谢您的帮助Javascript 在一个循环中循环三个div-一些div没有改变,javascript,jquery,Javascript,Jquery,大家好!关于用户显示和javascript的快速问题。我要做的是关闭更新箭头gif,显示旋转箭头,执行更新,隐藏旋转箭头,最后显示表示此项已设置的gif 我的问题是旋转箭头从不显示。我把睡眠放在那里是因为我认为更新发生得太快了,以至于我没有看到它,但事实似乎并非如此 非常感谢您的帮助 function sleep(milliSeconds){ var startTime = new Date().getTime(); // get the current time whi
function sleep(milliSeconds){
var startTime = new Date().getTime(); // get the current time
while (new Date().getTime() < startTime + milliSeconds); // hog cpu
}
function UpdateConfig(some_id) {
/* loop through all divs of class .changed_dropdown and if visible do something */
$(".changed_dropdown").each(function(index) {
if($(this).is(":visible")){
some_id = ($(this).data('some_id'));
/* turn off the div that shows this is in need of update (uparrow gif) */
$('#changed'+some_id).toggle(false);
/* turn on the div that displays the arrows going around in a circle (roundarrow gif) */
$('#updating'+some_id).toggle(true);
/* pause to allow the divs to change */
sleep(500);
var new_config = $("#" + some_id).val();
$.post("change_config.php?some_id="+some_id+"&config="+new_config);
/* turn off the div that displays the arrows going around in a circle (roundarrow gif) */
$('#updating'+some_id).toggle(false);
/* turn on the gif that indicates this is the current setting */
$('#unchanged'+some_id).toggle(true);
}
});
}
函数睡眠(毫秒){
var startTime=new Date().getTime();//获取当前时间
while(new Date().getTime()
只需将最后两行放入作为“$.post()”处理程序传入的函数中:
“$.post()”启动HTTP请求,但它会立即返回。通过延迟第二批切换直到完成,您可以让其他事情发生,包括视图的更新
编辑-另一个问题(我很确定)是您使用参数“some_id”的方式非常可疑。它是“UpdateConfig()”的参数,但您所做的只是从元素上的某些数据重新分配它。但是因为它是在函数顶部“.each()”循环的处理程序之外声明的,所以它实际上是由每个迭代共享的,因此也是由所有“$.post()”处理程序共享的。我不知道为什么它是一个参数,但是简单地更改从“.data()”调用分配它的行应该是安全的:
通过使用
var
声明它,可以使它成为“.each()”回调的局部变量,因此每个“$.post()”处理程序都有自己的副本。只需将最后两行放入作为“$.post()”处理程序传入的函数中:
“$.post()”启动HTTP请求,但它会立即返回。通过延迟第二批切换直到完成,您可以让其他事情发生,包括视图的更新
编辑-另一个问题(我很确定)是您使用参数“some_id”的方式非常可疑。它是“UpdateConfig()”的参数,但您所做的只是从元素上的某些数据重新分配它。但是因为它是在函数顶部“.each()”循环的处理程序之外声明的,所以它实际上是由每个迭代共享的,因此也是由所有“$.post()”处理程序共享的。我不知道为什么它是一个参数,但是简单地更改从“.data()”调用分配它的行应该是安全的:
通过使用
var
声明它,可以使它成为“.each()”回调的局部变量,因此每个“$.post()”处理程序都有自己的副本。如果在代码中放入类似的睡眠函数,文档DOM不会更新,它只会挂起浏览器。它仅在脚本完成当前运行时更新。您必须使用setTimeout和异步操作,并在回调函数中更新文档。您的文档DOM不会更新。如果您在代码中放入类似的睡眠函数,它只会挂起浏览器。它仅在脚本完成当前运行时更新。您必须使用setTimeout和异步操作,并在回调函数中更新您的文档。这确实使旋转箭头显示出来,但现在处理程序中的切换不起作用。好的,我想我明白了为什么会发生这种情况-我将更新答案。您对某个id的看法是正确的,我还没有机会清理它。谢谢你的提醒。虽然第二批切换仍然不会触发。好的,我收回这一点,它们确实会触发,但不会更新显示。我在那里放了一个警报,只是为了测试它,警报触发了。嗯……这确实显示了旋转箭头,但现在处理程序中的切换不起作用。好的,我想我明白了为什么会发生这种情况-我会更新答案。你对某个id的看法是正确的,我还没有机会清理它。谢谢你的提醒。虽然第二批切换仍然不会触发。好的,我收回这一点,它们确实会触发,但不会更新显示。我在那里放了一个警报,只是为了测试它,警报触发了。六羟甲基三聚氰胺六甲醚。。。
$.post("change_config.php?some_id="+some_id+"&config="+new_config, {}, function() {
$('#updating'+some_id).toggle(false);
$('#unchanged'+some_id).toggle(true);
});
var some_id = ($(this).data('some_id'));