2017-03-28 1 views
1

Pourquoi ce code renvoie-t-il spentScores comme NaN?

$(document).ready(initScores()); 
 

 
var lvlScores = 0; 
 
var currentScores = 0; 
 
var spentScores = 0; 
 

 
function initScores() { 
 
    console.log(spentScores); 
 
    console.log(spentScores + 44); 
 
    console.log(lvlScores); 
 
    initLvlScores(); 
 
    initSpentScores(); 
 
    initCurrentScores(); 
 
} 
 

 
function recountLvlScores() { 
 
    initScores(); 
 
    clearStatistics(); 
 
} 
 

 
function initLvlScores() { 
 
    var lvl = parseInt($('.lvl-select').val()); 
 
    switch (lvl) { 
 
    case 1: 
 
     lvlScores = 1000; 
 
     break; 
 
    case 2: 
 
     lvlScores = 1200; 
 
     break; 
 
    case 3: 
 
     lvlScores = 1500; 
 
     break; 
 
    case 4: 
 
     lvlScores = 2000; 
 
     break; 
 
    case 5: 
 
     lvlScores = 3000; 
 
     break; 
 
    } 
 
} 
 

 
function initSpentScores() { 
 
    $('.statistics').each(function() { 
 
    console.log("!!" + spentScores + parseInt($(this).val())); 
 
    console.log("!!" + parseInt($(this).val())); 
 
    spentScores = spentScores + parseInt($(this).val()); 
 
    }); 
 
} 
 

 
function initCurrentScores() { 
 
    currentScores = lvlScores - spentScores; 
 
    $('.scores').html(currentScores); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

Console:

scoresEditCounting.js:9 undefined 
scoresEditCounting.js:10 NaN 
scoresEditCounting.js:11 undefined 
scoresEditCounting.js:40 !!undefined44 
scoresEditCounting.js:41 !!44 
scoresEditCounting.js:40 !!NaN44 
scoresEditCounting.js:41 !!44 
+0

Est-ce que votre JavaScript est au bas de la page, alors que 'document' est déjà prêt? – krillgar

+0

Oui, car // console.log ("!!" + parseInt ($ (this) .val())); renvoie "!! 44" –

+0

où se trouvent les éléments HTML –

Répondre

4

Mise à jour cette ligne:

$(document).ready(initScores()); 

à ceci:

$(document).ready(initScores); 

Vous souhaitez que la page appelle la fonction lorsqu'elle est prête. Sinon, vous essayez d'accéder aux éléments DOM avant que la page ne soit prête.

+0

Ce n'est pas ça. Il s'exécute étant donné que son journal de console est en cours d'exécution – Orpheus

+1

@Orpheus Il exécute _early_ – SeinopSys

+0

@Orpheus Il obtient un élément du DOM avant que la page ne soit prête. Donc, il fait échouer – Ibu