2010-06-29 4 views
9

J'ai cette fonction:Pourquoi j'obtiens un message d'erreur indiquant que .replace n'est pas une fonction?

function countLitreKgSums(cProductIds){ 
    var cLitreKgSums = new Array(); 
    var cWeek = 0; 
    for(i=0;i<cProductIds.length;i++){ 
    var cLitreKgSum = 0; 
    $("#plan_table td[class='week']").each(function(){ 
      cWeek = $(this).html(); 
      var cLitreKgValue = $("input[name*='plan_table_week" + cWeek + "_prod" + cProductIds[i] + "_']").val(); 
      if (cLitreKgValue == "") { 
       cLitreKgValue = 0; 
      } 
      cLitreKgValue = cLitreKgValue.replace(/,/g, '.').replace(/[^\d\.]/g, '').replace(/\s/g, ''); 
      cLitreKgValue = parseFloat(cLitreKgValue); 
      cLitreKgSum += cLitreKgValue; 
     }); 
     cLitreKgSum = Math.round(cLitreKgSum * 100)/100; 
     cLitreKgSums[i] = cLitreKgSum; 
    } 
    return cLitreKgSums; 
    //console.log(cLitreKgSums); 
} 

Je reçois un message d'erreur qui .replace est pas une fonction, mais dans d'autres fonctions, il fonctionne comme il se doit. Quelle est la différence?

+0

String (cLitreKgValue) .replace – YumYumYum

Répondre

14

cLitreKgValue peut être un nombre au moment où vous essayez d'appeler replace dessus, pas une chaîne. Dans ce cas, l'erreur est correcte - les nombres n'ont pas de méthode replace.

+2

... et * correct * il (parce que je pense que anleon est à la recherche d'un changez le 'cLitreKgValue = 0;' à 'cLitreKgValue =" 0 ";' –

+0

Merci beaucoup! Cela semblait faire l'affaire. – anleon

+0

Chaîne (cLitreKgValue) .replace – YumYumYum

13

Modifier ceci:

cLitreKgValue.replace(/,/g, '.') 

à

("" + cLitreKgValue).replace(/,/g, '.') 
+2

Mieux vaut changer 'cLitreKgValue = 0;' à 'cLitreKgValue =" 0 ";' Je pense ... –

+0

@Nick Craver pourquoi mieux? –

+0

Vous n'êtes pas en train d'ajouter une chaîne pour chaque élément qui * n'a pas besoin de travail de cette façon. Bien qu'il soit encore mieux de faire un changement global, j'ai ajouté une réponse le montrant. –

3

Alors que les autres réponses fonctionnent (et sont corrects, les chiffres ne sont pas .replace(), c'est un String method), je pense qu'un changement global de la structure est mieux, comme ceci:

$("#plan_table td[class='week']").each(function(){ 
    cWeek = $(this).html(); 
    var cLitreKgValue = $("input[name*='plan_table_week" + cWeek + "_prod" + cProductIds[i] + "_']").val(); 
    if (cLitreKgValue !== "") { 
     cLitreKgValue = cLitreKgValue.replace(/,/g, '.').replace(/[^\d\.]/g, '').replace(/\s/g, ''); 
     cLitreKgSum += parseFloat(cLitreKgValue); 
    } 
}); 

Il n'y a aucune raison de faire tous les e au travail quand vous savez qu'il est 0 et ne touche pas le résultat, donc si "" signifie 0 et anything += 0 n'a aucun effet net, il suffit de sauter :)

+0

Merci pour cela aussi =) – anleon