2017-01-14 3 views
1

ich eine Seite machte, die von 1 bis 100. Die tatsächliche Primzahl Berechnung funktioniert gut, alle Primzahlen würde berechnen und anzeigen, aber wenn ich versuche, die Zahlen anzuhängen, die durch als Primzahlen getestet JQuery, würde es stattdessen jedes Mal als Nummer 101 anhängen.JQuery mit einem variablen falschem Wert anhängt

JS-Code:

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

Es hängt es richtig, es ist nur den falschen Wert für einen Grund anhängt ich nicht herausfinden können. Wenn ich die Variable in Text ändere, dann funktioniert das kein Problem. Es ist nur die Variable, die es nicht richtig behandeln kann.

+2

Kann haben Sie eine jsFiddle? –

+1

Bitte geben Sie den ganzen Code an ... Ihr Code sieht wie Pseudocode aus: "testNum" ist ein String? – sinisake

+1

@sinisake er tat es absichtlich: „Wenn ich die Variable in Text zu ändern, funktioniert es dann kein Problem.“. Um OP bitte Ihre gesamte Code zu schreiben oder eine Geige veröffentlichen, um es einfacher zu machen, das Problem – georaldc

Antwort

2

Per mein Kommentar: Sie testNum in jeder Schleife anhängen, aber erst nach Dokument bereit. Dies führt dazu, dass der Endwert von testNum angehängt wird, da die Schleife wahrscheinlich lange bevor das Dokument fertig ist ausgeführt wurde.

Um dieses Problem zu umgehen, indem Sie die gesamte Funktion innerhalb des DOM bereit Ereignis wickeln, und Sie sollten gut zu gehen. Hier ist ein Proof-of-Concept-Code, der auf dem von Ihnen bereitgestellten Code basiert.

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

Ja, das hat funktioniert. Vielen Dank! – Nimbus125

Verwandte Themen