2012-02-15 13 views
17

Sto cercando di recuperare la somma di tutti i valori in un td in base a una classe specifica. Il codice non genera errori, ma la mia somma continua a produrre "0".somma tutti i valori per la colonna della tabella in base alla classe

I valori numerici devono essere specificati in un modo particolare? Ho visto alcune altre risposte qui su SO da dove ho imitato il codice, e non vedo alcuna differenza reale tra la mia e la loro, così sono confusa sul motivo per cui il mio non funziona.

Ecco un tutorial ho seguito per riferimento: http://viralpatel.net/blogs/2009/07/sum-html-textbox-values-using-jquery-javascript.html

Ecco il mio javascript

$(document).ready(function(){ 
$('.price').each(function() { 
    calculateSum(); 
}); 
}); 

function calculateSum() { 

var sum = 0; 
//iterate through each td based on class and add the values 
    $(".price").each(function() { 

     //add only if the value is number 
     if(!isNaN(this.value) && this.value.length!=0) { 
      sum += parseFloat(this.value); 
     } 

    }); 
$('#result').text(sum);  
}; 

Ecco il mio html

<table border="1"> 
<tr> 
<th>Item</th> 
<th>Price</th> 
</tr> 
<tr> 
<td>Banana</td> 
<td class ="price">50</td> 
</tr> 
<tr> 
<td>Apple</td> 
<td class ="price">100</td> 
</tr> 
</table> 

<div id="result"></div> 

risposta

34

si desidera utilizzare text() invece di this.value (dal <td> s non hanno un "valore"):

var sum = 0; 
// iterate through each td based on class and add the values 
$(".price").each(function() { 

    var value = $(this).text(); 
    // add only if the value is number 
    if(!isNaN(value) && value.length != 0) { 
     sum += parseFloat(value); 
    } 
}); 

Inoltre, si sta eseguendo il looping degli elementi .price (chiamando calculateSum) più volte. È possibile sostituire

$(document).ready(function(){ 
    $('.price').each(function() { 
     calculateSum(); 
    }); 
}); 

con

$(calculateSum); 
+0

E 'stato brillante grazie. Non sapevo che potresti abbreviare il codice per il loop su elementi nel modo in cui descrivi. è stato molto utile grazie –

+0

Beh, non ho accorciato il codice che stava girando. Eri in loop due volte; uno nel tuo gestore di 'onload' e di nuovo all'interno della funzione 'calculateSum()' stessa. Ho rimosso il primo. Ho fatto scorciatoia la definizione del 'ready' handler. –

+0

mi ha aiutato, grazie Rob – StreetCoder

3

Ho un plugin per jQuery, Sumtr, che gestisce questo abbastanza bene se si desidera una riga di riepilogo.

Ecco il tuo example con il plug-in.

+0

Questo è davvero pulito. Vorrei aver visto questa libreria prima. Mi avrebbe salvato un po 'di tempo. Grazie per aver risposto comunque. Terrò d'occhio questo per riferimento futuro. –

+2

L'ho appena creato ieri. :-) – Larsenal

+1

funziona perfettamente, gestisce anche più colonne, che è esattamente quello che stavo cercando. Grazie molto! – hanzolo

Problemi correlati