JQuery用变量附加错误的值

时间:2017-01-14 00:31:03

标签: javascript jquery html

我正在制作一个页面,可以计算并显示从1到100的所有素数。实际的素数计算工作正常,但当我尝试通过JQuery追加测试为素数的数字时,它会改为追加它每次都是101号。

JS代码:

function primeFinder() {
    var testNum = 1;
    var failures = 0;
    var checkNum = testNum -1;
    while(testNum <= 100) {
        while(checkNum > 1) {
            if ((testNum/checkNum)%1 != 0) {
                failures += 1;
                checkNum -= 1;

                }
            else {
                checkNum -= 1;
                }               
            }
        if (failures == testNum - 2) {
                $(document).ready(function(){
                    $("#results").append(testNum + "<br>")
                })
                failures = 0;
                testNum +=1;
                checkNum = testNum -1;
        }
        else {
            failures = 0;
            testNum +=1;
            checkNum = testNum -1;
        }
    }
}

它正确地附加它,它只是附加不正确的值,原因我无法弄清楚。如果我将变量更改为文本,那么它没有问题。它只是它无法正确处理的变量。

1 个答案:

答案 0 :(得分:2)

根据我的评论:您在每个循环中附加testNum,但仅在文档准备好之后。这会导致附加testNum的最终值,因为循环很可能在文档准备好之前执行了。

要绕过这个问题,只需将整个函数包装在DOM ready事件中,你就应该好好去。这是一个基于您提供的代码的概念验证片段。

$(document).ready(function() {
   // You can move this function declaration outside DOM ready, doesn't matter
   var primeFinder = function() {
     var testNum = 1;
     var failures = 0;
     var checkNum = testNum - 1;
     while (testNum <= 100) {
       while (checkNum > 1) {
         if ((testNum / checkNum) % 1 != 0) {
           failures += 1;
           // console.log(checkNum + " ~~~ " + failures);
           checkNum -= 1;

         } else {
           checkNum -= 1;
         }
       }
       if (failures == testNum - 2) {
         console.log(testNum + " is prime!");

         $("#results").append(testNum + "<br>")
         failures = 0;
         testNum += 1;
         checkNum = testNum - 1;
       } else {
         // console.log(testNum + " is NOT prime!");
         failures = 0;
         testNum += 1;
         checkNum = testNum - 1;
       }
     }
   }
   
   // But you must execute this function within DOM ready
   primeFinder();
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="results"></div>