Javascript Jquery中更新Dom的超时?

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没有回调,因此我不确定是否有更好的方法

假设我想更改图像源onClick并进行一些计算。现在发生的事情是,当函数退出时,源发生了变化。(多姆很忙?)

如何使图像源立即更新,然后函数进入while循环

HTML:


这是一个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)包装它