【问题标题】:selection in a loop freezes my page循环中的选择会冻结我的页面
【发布时间】:2018-04-09 13:38:51
【问题描述】:

当谈到 Js 时,我是一个完整的新手,试图制作一些非常简单的脚本,该脚本使用 ajax 从我服务器上的 txt 文档中获取一串二进制数字,然后将其放入字符串 var 并更改第一个 0 在 1 中找到,在循环中使用 if 构造。

问题是,当页面尝试执行 if 行时,它只是冻结。从循环中取出相同的 if 构造,脚本的执行没有问题,所以我猜它与那个或/以及对 Js 脚本如何工作的一些基本误解有关。

这是脚本:

    function loadPos() 
    {                           
        var xhttp = new XMLHttpRequest();           
        xhttp.onreadystatechange = function() 
        {
            if (this.readyState == 4 && this.status == 200) 
                document.getElementById("demo").innerHTML = this.responseText;
        };
        xhttp.open("GET", "posizioni.txt", true);
        xhttp.send();
    }      

    function takeFirst()
    {
        var i=0;
        var check=false;
        var oldPos=[];

        loadPos();
        oldPos = document.getElementById("demo").innerHTML;

        for(i=0;!check||i<10;i++)
        {
            if(oldPos[i]=="0")
            {
                oldPos[i]="1";
                check=true;
            }
        }

        document.getElementById("demo").innerHTML=oldPos;
    }

【问题讨论】:

    标签: javascript arrays loops if-statement


    【解决方案1】:

    如果没有它你也能达到同样的效果,我看不到它有任何使用循环。请将您的函数更新为以下内容:

        function takeFirst()
        {
            loadPos();
            var oldPos = document.getElementById("demo").innerHTML;
    
            if(oldPos.indexOf("0") > -1){
                oldPos = oldPos.replace('0', '1');
            }
    
            document.getElementById("demo").innerHTML = oldPos;
        }
    

    【讨论】:

    • 呃只是有点问题,在按下执行脚本的按钮后,由于某种原因,演示元素中的数字改变了半秒,然后又变回了起始值,任何想法为什么那可能是?
    【解决方案2】:

    我想你想要for(i=0;!check &amp;&amp; i&lt;10;i++)。 但是还有另一种方法可以使用break;

      function loadPos() 
        {                           
            var xhttp = new XMLHttpRequest();           
            xhttp.onreadystatechange = function() 
            {
                if (this.readyState == 4 && this.status == 200) 
                    document.getElementById("demo").innerHTML = this.responseText;
            };
            xhttp.open("GET", "posizioni.txt", true);
            xhttp.send();
        }      
    
        function takeFirst()
        {
            var i=0;
            var oldPos=[];
    
            loadPos();
            oldPos = document.getElementById("demo").innerHTML;
    
            for(i=0;i<10;++i)
            {
                if(oldPos[i]=="0")
                {
                    oldPos[i]="1";
                    break;
                }
            }
    
            document.getElementById("demo").innerHTML=oldPos;
        }
    

    【讨论】:

    • 感谢您的回答,i
    • 我的代码更改阻止了无限循环。如果if 没有触发,这是第二个问题。显示 HTML,也许吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2020-02-24
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多