Javascript Jquery中更新Dom的超时?
假设我想更改图像源onClick并进行一些计算。现在发生的事情是,当函数退出时,源发生了变化。(多姆很忙?) 如何使图像源立即更新,然后函数进入while循环 HTML:Javascript Jquery中更新Dom的超时?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,假设我想更改图像源onClick并进行一些计算。现在发生的事情是,当函数退出时,源发生了变化。(多姆很忙?) 如何使图像源立即更新,然后函数进入while循环 HTML: 这是一个JSFIDLE。我不确定我是否正确理解您的意思,但您可以使用超时: setTimeout(function() { //while loop here }, 1000); 其中1000表示1秒。您可以缩小此值,使其不会等待太长时间 由于click()对onComplete没有回调,因此我不确定是否有更好的方法
这是一个JSFIDLE。我不确定我是否正确理解您的意思,但您可以使用超时:
setTimeout(function() {
//while loop here
}, 1000);
其中1000
表示1秒。您可以缩小此值,使其不会等待太长时间
由于
click()
对onComplete
没有回调,因此我不确定是否有更好的方法来实现这一点 我不确定我是否理解正确,但您可以使用超时:
setTimeout(function() {
//while loop here
}, 1000);
其中1000
表示1秒。您可以缩小此值,使其不会等待太长时间
由于
click()
对onComplete
没有回调,因此我不确定是否有更好的方法来实现这一点 我不确定我是否理解正确,但您可以使用超时:
setTimeout(function() {
//while loop here
}, 1000);
其中1000
表示1秒。您可以缩小此值,使其不会等待太长时间
由于
click()
对onComplete
没有回调,因此我不确定是否有更好的方法来实现这一点 我不确定我是否理解正确,但您可以使用超时:
setTimeout(function() {
//while loop here
}, 1000);
其中1000
表示1秒。您可以缩小此值,使其不会等待太长时间
由于
click()
对onComplete
没有回调,因此我不确定是否有更好的方法来实现这一点 如果您想正确执行,这个问题实际上比设置超时要复杂一些
设置超时的问题在于,超时必须足够大才能加载图像。如果映像没有在超时时间内加载,它仍然必须等待循环
实际上,您需要做的是在每个步骤之间给它一个更新DOM的机会。要做到这一点,您需要设置一个每0毫秒触发一次的超时(或间隔,但我更喜欢超时方法,因为您有更好的控制能力)(基本上,尽可能快)。但是,由于这些都是超时,所以当DOM准备就绪时,它有机会在其中两个超时之间更新DOM
console.clear();
$( "#ImageSrc" ).click(function() {
loading_imgsrc="http://goo.gl/wBhyee";
$("#ImageSrc").attr('src',loading_imgsrc);
console.log("changed");
doTest(0);
});
function doTest(test) {
test = test + 1;
console.log(test);
if (test < 1000) {
setTimeout((function() { return function() { doTest(test); }})(), 0);
}
}
console.clear();
$(“#ImageSrc”)。单击(函数(){
正在加载\u imgsrc=”http://goo.gl/wBhyee";
$(“#ImageSrc”).attr('src',加载\u imgsrc);
控制台日志(“更改”);
doTest(0);
});
函数doTest(test){
测试=测试+1;
控制台日志(测试);
如果(试验<1000){
setTimeout((函数(){return函数(){doTest(test);}}})(),0);
}
}
jsiddle:如果您想正确地执行,这个问题实际上比仅仅设置超时要复杂一些 设置超时的问题在于,超时必须足够大才能加载图像。如果映像没有在超时时间内加载,它仍然必须等待循环 实际上,您需要做的是在每个步骤之间给它一个更新DOM的机会。要做到这一点,您需要设置一个每0毫秒触发一次的超时(或间隔,但我更喜欢超时方法,因为您有更好的控制能力)(基本上,尽可能快)。但是,由于这些都是超时,所以当DOM准备就绪时,它有机会在其中两个超时之间更新DOM
console.clear();
$( "#ImageSrc" ).click(function() {
loading_imgsrc="http://goo.gl/wBhyee";
$("#ImageSrc").attr('src',loading_imgsrc);
console.log("changed");
doTest(0);
});
function doTest(test) {
test = test + 1;
console.log(test);
if (test < 1000) {
setTimeout((function() { return function() { doTest(test); }})(), 0);
}
}
console.clear();
$(“#ImageSrc”)。单击(函数(){
正在加载\u imgsrc=”http://goo.gl/wBhyee";
$(“#ImageSrc”).attr('src',加载\u imgsrc);
控制台日志(“更改”);
doTest(0);
});
函数doTest(test){
测试=测试+1;
控制台日志(测试);
如果(试验<1000){
setTimeout((函数(){return函数(){doTest(test);}}})(),0);
}
}
jsiddle:如果您想正确地执行,这个问题实际上比仅仅设置超时要复杂一些 设置超时的问题在于,超时必须足够大才能加载图像。如果映像没有在超时时间内加载,它仍然必须等待循环 实际上,您需要做的是在每个步骤之间给它一个更新DOM的机会。要做到这一点,您需要设置一个每0毫秒触发一次的超时(或间隔,但我更喜欢超时方法,因为您有更好的控制能力)(基本上,尽可能快)。但是,由于这些都是超时,所以当DOM准备就绪时,它有机会在其中两个超时之间更新DOM
console.clear();
$( "#ImageSrc" ).click(function() {
loading_imgsrc="http://goo.gl/wBhyee";
$("#ImageSrc").attr('src',loading_imgsrc);
console.log("changed");
doTest(0);
});
function doTest(test) {
test = test + 1;
console.log(test);
if (test < 1000) {
setTimeout((function() { return function() { doTest(test); }})(), 0);
}
}
console.clear();
$(“#ImageSrc”)。单击(函数(){
正在加载\u imgsrc=”http://goo.gl/wBhyee";
$(“#ImageSrc”).attr('src',加载\u imgsrc);
控制台日志(“更改”);
doTest(0);
});
函数doTest(test){
测试=测试+1;
控制台日志(测试);
如果(试验<1000){
setTimeout((函数(){return函数(){doTest(test);}}})(),0);
}
}
jsiddle:如果您想正确地执行,这个问题实际上比仅仅设置超时要复杂一些 设置超时的问题在于,超时必须足够大才能加载图像。如果映像没有在超时时间内加载,它仍然必须等待循环 实际上,您需要做的是在每个步骤之间给它一个更新DOM的机会。要做到这一点,您需要设置一个每0毫秒触发一次的超时(或间隔,但我更喜欢超时方法,因为您有更好的控制能力)(基本上,尽可能快)。但是,由于这些都是超时,所以当DOM准备就绪时,它有机会在其中两个超时之间更新DOM
console.clear();
$( "#ImageSrc" ).click(function() {
loading_imgsrc="http://goo.gl/wBhyee";
$("#ImageSrc").attr('src',loading_imgsrc);
console.log("changed");
doTest(0);
});
function doTest(test) {
test = test + 1;
console.log(test);
if (test < 1000) {
setTimeout((function() { return function() { doTest(test); }})(), 0);
}
}
console.clear();
$(“#ImageSrc”)。单击(函数(){
正在加载\u imgsrc=”http://goo.gl/wBhyee";
$(“#ImageSrc”).attr('src',加载\u imgsrc);
控制台日志(“更改”);
doTest(0);
});
函数doTest(test){
测试=测试+1;
控制台日志(测试);
如果(试验<1000){
setTimeout((函数(){return函数(){doTest(test);}}})(),0);
}
}
jsfdle:只需在函数中包装您的循环,然后用setTimeout(f)包装它