2016-06-15 16 views
0

Ich habe eine Zwischensummenfunktion, die einige Berechnungen in einer HTML-Tabelle (fasst Spalten, die Klassen zugewiesen haben). Ich habe es so modifiziert, dass ich ihm Argumente übergeben kann, und beim ersten Funktionsaufruf funktioniert es wie gewünscht. Wenn ich es wieder anrufe, erstellt es die Zelle und ordnet die Klasse zu, aber die Mathematik oder anscheinend etwas anderes ist falsch, weil es NaN zurückgibt. Hier ist meine JSFiddle und unten ist meine Funktion. Jede Hilfe wäre willkommen!jquery Funktion Berechnung funktioniert nicht richtig beim zweiten Aufruf

//v is parent,z is child element,w is which child column....ex: 0 or 1, y is first run or not, z is class name you want assigned 
function subtotals(v, w, x, y, z) { 
    $(v).each(function (index, element) { 
     var subTotalAmt = 0; 
     var numRows = parseInt($(this).attr("rowspan")); 
     var firstRow = $(this).parent(); 
     var lastRow = firstRow.nextAll('tr').slice(numRows - 2, numRows - 1); 
     var currentRow = firstRow; 
     for (i = 0; i < numRows; i++) { 
      subTotalAmt += parseInt($(currentRow.children(w)[x]).text()); 
      currentRow = currentRow.next("tr"); 
     } 
     if(y == 'yes'){ 
     lastRow.after('<tr><td class="sub0">Sub Total</td><td class="' + z + '">' + subTotalAmt + '</td></tr>'); 
     $(this).attr('rowspan', numRows + 1); 
     } 
     else { 
     lastRow.append('<td class="' + z + '">' + subTotalAmt + '</td>'); 
     }   
    }); 
} 
$(function doSubtotals() { 
    subtotals('.parent','.child','1','yes','sub1'); 
    subtotals('.parent','.child','2','no','sub2'); 
}); 

Antwort

0

Einige Ihrer <td> sind eine gültige Zahl nicht enthalten, die Fall die Berechnung und NaN setzen zu scheitern (steht für 'Not a Number') anstelle einer gültigen Nummer (NaN + number = NaN). Um das zu beheben, habe ich diese Bedingung zu Ihrem Code hinzugefügt:

for (i = 0; i < numRows; i++) { 
     var tdValue=0; 
     if(!isNaN(parseInt($(currentRow.children(w)[x]).text()))) 
     { 
      tdValue=parseInt($(currentRow.children(w)[x]).text()); 
     } 
     subTotalAmt += tdValue; 
     currentRow = currentRow.next("tr"); 
    } 
+0

vielen Dank! – khemikal

Verwandte Themen