[RISOLTO] Problema somma td, prende solo il primo valore

carlo9987

Utente Attivo
5 Mar 2013
35
0
0
Roma
Ciao a tutti!

Devo calcolare il totale dei td con name "somma", ma la funzione mi restituisce solamente il valore del primo. Di seguito il codice che utilizzo:

Codice:
$('#somma').each(function() {
	var value = $(this).text();
	if(!isNaN(value) && value.length != 0) {
		sum += parseFloat(value);
	}
	$('#totaleSomma').text(sum);
});

Qualcuno potrebbe aiutarmi??? :dipser:

Vi ringrazio in anticipo,
Carlo.
 
Codice:
$('#somma')
con questa istruzione ti riferisci all'elemento con id = 'somma'
l'id è univoco non puoi assegnare lo stesso a piu elementi
puoi farlo invece con le classi
HTML:
<td class='somma'>
l'istruzione diventa
Codice:
$('.somma')
 
Ah perfetto, grazie mille!!!

Vorrei approfittare per farti un'altra domanda... Questi td "Somma" fanno parte di tr che potrebbero essere hide (a seconda di come sono selezionate delle checkbox), se volessi sommare solo quelli che sono visibili come potrei fare?

Ti ringrazio in anticipo!

Carlo
 
cosi al volo
potresti ciclare le tr e verificare l'attributo display
Codice:
    $("tr").each(function() {
        if($(this).css('display' != 'none')) {
            // codice
        }
    })
non ho testato
 
Partendo dal tuo suggerimento ho scritto questo codice, ma praticamente in #totaleSomma non inserisce nulla:

Codice:
var sum = 0;
$('.rowResult').each(function() {
        if($(this).is(':visible')) {	
	        var value = $('#somma').text();
		if(!isNaN(value) && value.length != 0) {
			sum += parseFloat(value);
		}
	}
	$('#totaleSomma').text(sum);
});

Cosa sbaglio??
 
Il metodo text() non può essere usato su campi di input.
Totale somma cosa é? Prova ad usare val() al posto di text() se è un campo di input.
 
@Longo
abbiamo a che fare con le td non con gli input, in questo caso text() legge il contenuto della cella e parseFloat lo trasforma da stringa a numero per la somma
@carlo9987
prova in questo modo
HTML:
<style>
    .h {
        display: none;
    }
</style>
<table id="tabella">
    <tr class="h">
        <td class="somma">3.2</td>
    </tr>
    <tr>
        <td class="somma">3.8</td>
    </tr>
    <tr>
        <td class="somma">3.0</td>
    </tr>
    <tr>
        <td class="somma">5.2</td>
    </tr>
    <tr class="h">
        <td class="somma">4.0</td>
    </tr>    
</table>
<div id="totaleSomma"></div>
<!-- ovviamente la libreria la richiami come vuoi tu ->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
    var sum = 0;
    $('#tabella tr').each(function() {
        
        if($(this).is(':visible')) {
            var value = $(this).children("td").text();
            if(!isNaN(value) && value.length != 0) {
                sum += parseFloat(value);
            }
        }
        $('#totaleSomma').text(sum);
    });
</script>
 
Innanzitutto grazie mille per le risposte!

Allora, partendo dal codice scritto da cricri sono riuscito a farlo funzionare così:

Codice:
var sum = 0;
$('#tableResult tr').each(function() {
	if($(this).is(':visible')) {
		value = 0;
		var value = $(this).children('.somma').text();
		if(!isNaN(value) && value.length != 0) {
			sum += parseFloat(value);
		}
	}
	$('#totaleSomma').text(sum);
});

Riadattandolo al mio caso ho modificato solo il children con children('.somma').

Ancora grazie mille!!!! :)

@Longo
abbiamo a che fare con le td non con gli input, in questo caso text() legge il contenuto della cella e parseFloat lo trasforma da stringa a numero per la somma
@carlo9987
prova in questo modo
HTML:
<style>
    .h {
        display: none;
    }
</style>
<table id="tabella">
    <tr class="h">
        <td class="somma">3.2</td>
    </tr>
    <tr>
        <td class="somma">3.8</td>
    </tr>
    <tr>
        <td class="somma">3.0</td>
    </tr>
    <tr>
        <td class="somma">5.2</td>
    </tr>
    <tr class="h">
        <td class="somma">4.0</td>
    </tr>    
</table>
<div id="totaleSomma"></div>
<!-- ovviamente la libreria la richiami come vuoi tu ->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
    var sum = 0;
    $('#tabella tr').each(function() {
        
        if($(this).is(':visible')) {
            var value = $(this).children("td").text();
            if(!isNaN(value) && value.length != 0) {
                sum += parseFloat(value);
            }
        }
        $('#totaleSomma').text(sum);
    });
</script>
 

Discussioni simili

M
Risposte
12
Visite
3K
HTML e CSS
Membro cancellato 26246
M