2012-02-15 360 views
17

Estoy tratando de recuperar la suma de todos los valores en una td en función de una clase específica. El código no arroja ningún error pero mi suma sigue dando como resultado "0".suma todos los valores para la columna de la tabla según la clase

¿Los valores numéricos deben especificarse de una manera particular? Vi algunas otras respuestas aquí en SO de donde he imitado el código, y no veo ninguna diferencia real entre la mía y la de ellos, así que estoy confundido sobre por qué el mío no está funcionando.

Aquí hay un tutorial i seguido de referencia: http://viralpatel.net/blogs/2009/07/sum-html-textbox-values-using-jquery-javascript.html

Aquí es mi 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);  
}; 

Aquí está mi 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> 

Respuesta

34

que desea utilizar text() en lugar de this.value (ya <td> s no tienen un "valor"):

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); 
    } 
}); 

Además, está pasando por encima de sus elementos .price (llamando al calculateSum) varias veces. Puede reemplazar

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

con

$(calculateSum); 
+0

Eso fue brillante gracias. No sabía que podrías acortar el código para recorrer los elementos de la forma que describes. eso fue muy útil. gracias –

+0

Bueno, no acorté el código que estaba bucleando. Estabas haciendo bucles dos veces; uno en su controlador 'onload' y nuevamente dentro de la función' calculateSum() '. Eliminé el primero. Hice un atajo a la definición del manejador 'listo'. –

+0

me ayudó, gracias Rob – StreetCoder

3

tengo un plugin de jQuery, Sumtr, que se encarga de esta bastante bien si quieres una fila de resumen.

Aquí está su example con el complemento.

+0

Eso es realmente bueno. Ojalá hubiera visto esta biblioteca antes. Me habría ahorrado algo de tiempo. Gracias por responder de todos modos. Voy a vigilar esto para futuras referencias. –

+2

Acabo de crearlo ayer. :-) – Larsenal

+1

esto funciona muy bien, también maneja múltiples columnas, que es EXACTAMENTE lo que estaba buscando. ¡Muchas gracias! – hanzolo

Cuestiones relacionadas