Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript。代码未执行。用户界面未更新_Javascript_User Interface - Fatal编程技术网

JavaScript。代码未执行。用户界面未更新

JavaScript。代码未执行。用户界面未更新,javascript,user-interface,Javascript,User Interface,当更新用户界面的代码行在使系统忙碌一段时间的代码块之前执行时,UI不会更新。 请参阅下面的代码: myFunction(); 函数myFunction(){ document.getElementById(“id1”).value=“1”; var j=真; 对于(var i=0;j==true;i++){ document.getElementById(“id2”).value=“e”+i; 如果(i==999999) j=假; } document.getElementById(“id1

当更新用户界面的代码行在使系统忙碌一段时间的代码块之前执行时,UI不会更新。 请参阅下面的代码:


myFunction();
函数myFunction(){
document.getElementById(“id1”).value=“1”;
var j=真;
对于(var i=0;j==true;i++){
document.getElementById(“id2”).value=“e”+i;
如果(i==999999)
j=假;
}
document.getElementById(“id1”).value=“2”;
}

值会更新,只是在JavaScript执行完成之前屏幕不会更新(JavaScript执行会锁定UI)。添加的console.log将打印您期望的内容:

myFunction();

function myFunction() {
    console.log(document.getElementById("id1").value); // outputs "start" as expected
    document.getElementById("id1").value = "1";
    console.log(document.getElementById("id1").value); // outputs "1" as expected
    var j = true;
    for (var i = 0; j == true; i++) {
        document.getElementById("id2").value = "e" + i;
        if (i == 999999) j = false;
    }
    document.getElementById("id1").value = "2";
}
一种解决方案是将循环分成“块”。假设我们一次运行1000次迭代,然后使用
setTimeout
将接下来的1000次迭代安排在1ms后运行。我们重复这一过程,直到我们在整个集合上循环:

myFunction();

function myFunction() {
    // iterator which we count up each loop
    var i = 0;

    // set to initial value
    document.getElementById("id1").value = "1";

    function processDone() {
        document.getElementById("id1").value = "2";
    }

    function processChunk() {
        var maxLoopsPerCall = 1000;
        while (maxLoopsPerCall-- > 0) {
            document.getElementById("id2").value = "e" + i;

            // if we're done, we call our done function and call return (so we don't schedule any more chunks
            if (i == 999999) {
                processDone();
                return;
            }

            i += 1;
        }

        // schedule to process next chunk of the loop
        setTimeout(processChunk, 1);
    }

    // schedule to process the first chunk of the loop
    setTimeout(processChunk, 1);
}

值会更新,只是在JavaScript执行完成之前屏幕不会更新(JavaScript执行会锁定UI)。添加的console.log将打印您期望的内容:

myFunction();

function myFunction() {
    console.log(document.getElementById("id1").value); // outputs "start" as expected
    document.getElementById("id1").value = "1";
    console.log(document.getElementById("id1").value); // outputs "1" as expected
    var j = true;
    for (var i = 0; j == true; i++) {
        document.getElementById("id2").value = "e" + i;
        if (i == 999999) j = false;
    }
    document.getElementById("id1").value = "2";
}
一种解决方案是将循环分成“块”。假设我们一次运行1000次迭代,然后使用
setTimeout
将接下来的1000次迭代安排在1ms后运行。我们重复这一过程,直到我们在整个集合上循环:

myFunction();

function myFunction() {
    // iterator which we count up each loop
    var i = 0;

    // set to initial value
    document.getElementById("id1").value = "1";

    function processDone() {
        document.getElementById("id1").value = "2";
    }

    function processChunk() {
        var maxLoopsPerCall = 1000;
        while (maxLoopsPerCall-- > 0) {
            document.getElementById("id2").value = "e" + i;

            // if we're done, we call our done function and call return (so we don't schedule any more chunks
            if (i == 999999) {
                processDone();
                return;
            }

            i += 1;
        }

        // schedule to process next chunk of the loop
        setTimeout(processChunk, 1);
    }

    // schedule to process the first chunk of the loop
    setTimeout(processChunk, 1);
}

值会更新,只是在JavaScript执行完成之前屏幕不会更新(JavaScript执行会锁定UI)。添加的console.log将打印您期望的内容:

myFunction();

function myFunction() {
    console.log(document.getElementById("id1").value); // outputs "start" as expected
    document.getElementById("id1").value = "1";
    console.log(document.getElementById("id1").value); // outputs "1" as expected
    var j = true;
    for (var i = 0; j == true; i++) {
        document.getElementById("id2").value = "e" + i;
        if (i == 999999) j = false;
    }
    document.getElementById("id1").value = "2";
}
一种解决方案是将循环分成“块”。假设我们一次运行1000次迭代,然后使用
setTimeout
将接下来的1000次迭代安排在1ms后运行。我们重复这一过程,直到我们在整个集合上循环:

myFunction();

function myFunction() {
    // iterator which we count up each loop
    var i = 0;

    // set to initial value
    document.getElementById("id1").value = "1";

    function processDone() {
        document.getElementById("id1").value = "2";
    }

    function processChunk() {
        var maxLoopsPerCall = 1000;
        while (maxLoopsPerCall-- > 0) {
            document.getElementById("id2").value = "e" + i;

            // if we're done, we call our done function and call return (so we don't schedule any more chunks
            if (i == 999999) {
                processDone();
                return;
            }

            i += 1;
        }

        // schedule to process next chunk of the loop
        setTimeout(processChunk, 1);
    }

    // schedule to process the first chunk of the loop
    setTimeout(processChunk, 1);
}

值会更新,只是在JavaScript执行完成之前屏幕不会更新(JavaScript执行会锁定UI)。添加的console.log将打印您期望的内容:

myFunction();

function myFunction() {
    console.log(document.getElementById("id1").value); // outputs "start" as expected
    document.getElementById("id1").value = "1";
    console.log(document.getElementById("id1").value); // outputs "1" as expected
    var j = true;
    for (var i = 0; j == true; i++) {
        document.getElementById("id2").value = "e" + i;
        if (i == 999999) j = false;
    }
    document.getElementById("id1").value = "2";
}
一种解决方案是将循环分成“块”。假设我们一次运行1000次迭代,然后使用
setTimeout
将接下来的1000次迭代安排在1ms后运行。我们重复这一过程,直到我们在整个集合上循环:

myFunction();

function myFunction() {
    // iterator which we count up each loop
    var i = 0;

    // set to initial value
    document.getElementById("id1").value = "1";

    function processDone() {
        document.getElementById("id1").value = "2";
    }

    function processChunk() {
        var maxLoopsPerCall = 1000;
        while (maxLoopsPerCall-- > 0) {
            document.getElementById("id2").value = "e" + i;

            // if we're done, we call our done function and call return (so we don't schedule any more chunks
            if (i == 999999) {
                processDone();
                return;
            }

            i += 1;
        }

        // schedule to process next chunk of the loop
        setTimeout(processChunk, 1);
    }

    // schedule to process the first chunk of the loop
    setTimeout(processChunk, 1);
}

您需要使代码异步,如下所示


myFunction();
函数myFunction(){
document.getElementById(“id1”).value=“1”;
setTimeout(函数(){

对于(var i=0;i您需要使代码异步,如下所示


myFunction();
函数myFunction(){
document.getElementById(“id1”).value=“1”;
setTimeout(函数(){

对于(var i=0;i您需要使代码异步,如下所示


myFunction();
函数myFunction(){
document.getElementById(“id1”).value=“1”;
setTimeout(函数(){

对于(var i=0;i您需要使代码异步,如下所示


myFunction();
函数myFunction(){
document.getElementById(“id1”).value=“1”;
setTimeout(函数(){

对于(var i=0;i您可以尝试使用
window.setInterval()

var id1=document.getElementById(“id1”);
var id2=document.getElementById(“id2”);
id1.value=1;
var i=0;
var t=setInterval(函数(){
如果(9999999

您可以尝试使用
window.setInterval()

var id1=document.getElementById(“id1”);
var id2=document.getElementById(“id2”);
id1.value=1;
var i=0;
var t=setInterval(函数(){
如果(9999999

您可以尝试使用
window.setInterval()

var id1=document.getElementById(“id1”);
var id2=document.getElementById(“id2”);
id1.value=1;
var i=0;
var t=setInterval(函数(){
如果(9999999

您可以尝试使用
window.setInterval()

var id1=document.getElementById(“id1”);
var id2=document.getElementById(“id2”);
id1.value=1;
var i=0;
var t=setInterval(函数(){
如果(9999999



1
没有分配给
id1
,因为您在
for
循环之后立即分配了
2
。是的,但是循环需要10秒。循环时我应该看到1。@Marc,您误解了直到javascript完成执行后屏幕才会更新……谢谢,这不是一个错误吗?怎么可能我对此进行了修正?@Marc Javascript执行不是同步的。它是单线程的。如果您想看到屏幕上的值发生变化,请将
for
循环替换为
setInterval
或递归
setTimeout
,因为您正在将
2
分配给它,因此
1
没有分配给
id1
for
循环之后是的,但是循环需要10秒。循环时我应该看到1。@Marc,你误解了直到javascript完成执行后屏幕才更新。……谢谢,这不是一个错误吗?我如何纠正这个错误?@Marc javascript执行不是同步的。而且它是单线程的。替换
 如果您想在屏幕上看到值的变化,请使用
setInterval
循环或递归
setTimeout