2017-01-14 37 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