2010-10-15 3 views
4

Je voudrais calculer la somme des sous-totaux dynamiquement mais je reçois toujours cette erreur:Compute somme dynamiquement avec le javascript

document.getElementById("item_subtotal[" + cnt + "]") is null 

Mon code javascript:

function calculateTotalAll(numitems) {  
    var cnt = 1; 
    var totalAmt = 0; 

    while(cnt <= numitems) {  
    totalAmt = parseInt(totalAmt) + parseInt(document.getElementById('item_subtotal[' + cnt + ']').value); 
    cnt++; 
    } 

    document.getElementById('order_total').value = parseInt(totalAmt); 
} 
+0

Pouvez-vous poster le code HTML pour les éléments avec lesquels vous travaillez? –

+0

La dernière ligne n'a pas besoin de 'parseInt()'; vous avez besoin de 'string()' à la place. – staticsan

Répondre

0

Vous êtes assez proche, mais vous devez vérifier les champs avec des valeurs vides au lieu de supposer qu'ils contiennent des chiffres. Il fonctionne avec seulement des modifications mineures dans ce JS fiddle

changé votre fonction à ceci:

function calculateTotal(numitems) { 
    var totalAmt = 0; 

    for (var cnt = 1; cnt <= numitems; cnt++) { 
     var subtotal = document.getElementById('item_subtotal[' + cnt + ']'); 
     if (subtotal.value === null || subtotal.value === '') { 
      continue; 
     } 

     totalAmt += (subtotal.value * 1); 
    } 

    document.getElementById('order_total').innerHTML = totalAmt; 
} 
+0

Il y a un problème avec cette ligne je suppose: document.getElementById ('item_subtotal [' + cnt + ']'); car il va demander que si (parseInt (subtot.value) == '') est nul. AIDE – anonymous2

+0

Mais si je le teste avec document.getElementById ('item_subtotal [1]') cela fonctionne bien – anonymous2

+0

Je ne suis pas sûr de ce que vous dites. Il est assez facile de vérifier null si vous en avez besoin, mais puisque vous devriez savoir combien d'éléments il y a, cela ne semble pas particulièrement nécessaire. –

0

L'article n'a pas été défini dans votre page - vérifiez pour vous assurer qu'elle est bien présente dans la source.

+0

Quand je fais un exemple: alert (document.getElementById ('item_subtotal [25]'). Value); obtiendra la valeur – anonymous2

0

Votre problème peut être ces crochets.

De l'html4 spec:

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

+0

crochets sont bien, et aussi régulièrement utilisé au profit des scripts php –

2

je regarderais si l'identifiant existe, à savoir

while(cnt <= numitems) { 
    var curItem = document.getElementById('item_subtotal[' + cnt + ']'); 
    if(curItem!=null){ 
     totalAmt = parseInt(totalAmt) + parseInt(curItem.value); 
    } 
    cnt++; 
    } 

De plus, je voudrais utiliser l'extension Firebug pour Firefox de regarder ce qui pourrait avoir mal tourné:

while(cnt <= numitems) { 
    var curItem = document.getElementById('item_subtotal[' + cnt + ']'); 
    if(curItem!=null){ 
     totalAmt = parseInt(totalAmt) + parseInt(curItem.value); 
    }else{ 
     console.log('Couldn\'t find element item_subtotal[' + cnt + ']'); 
    } 
    cnt++; 
    } 
Questions connexes