2011-11-19 1 views
4

J'ai un formulaire avec plusieurs zones de texte et le nombre de zones de texte change en fonction des valeurs que je récupère de la base de données. Ce que j'essaye de faire est de multiplier toutes les valeurs de valeurs de champs de texte donc d'abord je les mets dans un tableau et les multiplie et envoie la réponse à une zone de texte. Mais je ne peux pas sembler avoir la bonne réponse. Par exemple, quand j'ai 3 zones de texte et que j'entre 1 dans chaque zone de texte, je devrais obtenir 1x1x1 = 1 mais j'obtiens la réponse 3. Quand j'entre 2 dans chaque zone de texte, je devrais obtenir 2x2x2 = 8 12.Comment multiplier toutes les valeurs dans un javascript

Mon code est le suivant:

code Javascript:

function sumfrm(form){ 
    var totalOdds = 0; 
    var odds = document.getElementsByTagName('input'); 
    var n; 
    var i; // 
for (i = 0; i < odds.length; ++i) { 
    n = parseFloat(odds.item(i).value, 10); 
    if (!isNaN(n)) { 
     totalOdds += n*n; 
    } 
} 
+0

totalOdds + = n * n; fait ce qui suit: il prend le résultat de n * n et l'ajoute à totalOdds. (Vous voulez quelque chose comme: totalOdds = totalOdds * n) – ajax333221

Répondre

2
var totalOdds = 1; //initialize like this 
totalOdds = totalOdds * n // do this in your for loop 

devrait faire l'affaire

Ce que vous avez actuellement pour 1x1x1.

totalOdds dans le début est égal à 0

Après totalOdds += 1 * 1

est une

Encore une fois après la deuxième fois totalOdds += 1 * 1

est 2

et après une troisième fois, il est

+0

La raison pour laquelle cela fonctionne et pas votre code original, est que dans la boucle for vous prenez totalOdds et en ajoutant n * n (n au carré).Ce que vous voulez faire est de commencer par 1, multipliez cela par la case de saisie 1, puis multipliez le résultat par chaque boîte de saisie à tour de rôle. totalOdds * = n est une autre façon d'accomplir cela –

+0

Merci beaucoup. Ça a marché. –

+0

@LondonBoy ... Content que ça aide. Veuillez l'accepter comme réponse s'il résout votre problème –

0

d'abord tout ce que je vous suggère un nettoyage peu de code binaire:

  1. enlever l'argument form inutilisé de votre fonction.

  2. Réduisez le nombre de variables locales dans votre corps de fonction.

    function multiply() { 
    
        var inputs = document.getElementsByTagName('input'); 
    
        var result = parseFloat(inputs.item(0).value, 10) || 0; 
        (result == 0) && return 0; 
        for (var i = 1; i < inputs.length; ++i) { 
         n = parseFloat(inputs.item(i).value, 10); 
         (isNaN(n) || n == 0) ? return 0 : result *= n; 
        } 
    
        return result; 
    } 
    
0

Vous prenez la somme des carrés des nombres. Au lieu de cela, faites ceci:

function sumfrm(form){ 
    var totalOdds = 1; 
    var odds = form.getElementsByTagName('input'); 
    var n, i; 
    for(i = 0; i < odds.length; i++) { 
    n = parseFloat(odds[i].value); 
    if(!isNaN(n)) { 
     totalOdds *= n; 
    } 
    } 
}
1
for (i = 0; i < odds.length; ++i) { 
    n = parseFloat(odds.item(i).value, 10); 
    if (!isNaN(n)) { 
     totalOdds *= n; 
    } 
} 
1
function sumfrm(form){ 
    var totalOdds = 1; // changed 
    var odds = document.getElementsByTagName('input'); 
    var n; 
    var i; // 
for (i = 0; i < odds.length; ++i) { 
    n = parseFloat(odds.item(i).value, 10); 
    if (!isNaN(n)) { 
     totalOdds *= n; // changed 
    } 
} 

Changé deux lignes. Pour fonctionner correctement, frère :)

0

Pour multiplier le tableau, il vaudra mieux utiliser la fonction par défaut dans le script java "réduire", vous pouvez pousser toutes les valeurs dans un tableau et ensuite faire la multiplication S'il vous plaît essayer le ci-dessous le code. (c'est ES6)

let sum = [1, 1, 1].reduce((prev, curr) => prev * curr); 
Questions connexes