2017-01-14 34 views
1

我正在制作一个页面,可以计算并显示从1到100的所有素数。实际素数计算工作正常,但是当我尝试追加通过质数测试的数字JQuery,它会把它作为每一次的数字101附加。JQuery附加错误的值与变量

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; 
     } 
    } 
} 

其追加得当,它只是附加了不正确的值的原因,我想不通。如果我将变量更改为文本,则不会出现问题。这只是它无法正确处理的变量。

+2

你能做出一个的jsfiddle? –

+1

请提供完整的代码...您的代码看起来像伪代码:“testNum”是字符串? – sinisake

+1

@sinisake他故意这样做:“如果我将变量更改为文本,则不会出现问题。”对于OP,请张贴您的整个代码或张贴小提示,以便更容易地发现问题 – georaldc

回答

2

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

为了规避这个问题,只需将您的整个函数包装在DOM就绪事件中,并且您应该很好。这是一个基于您提供的代码的概念验证片段。

$(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>

+0

是的,这工作。谢谢! – Nimbus125