SO - 16541695

by igos

HTML

<table>
	<tr class="sumToMe" style="background-color:grey;">
		<td>Sum</td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
	</tr>
	<tr class="sumToUp">
		<td></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
	</tr>
	<tr class="sumToUp">
		<td></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
	</tr>
	<tr class="sumToMe" style="background-color:grey;">
		<td>Sum</td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
	</tr>
	<tr class="sumToUp">
		<td></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11" /></td>
		<td><input type="text" value="11"...

JavaScript

$('tr.sumToUp input').change(function(){
    var $this = $(this), $row = $this.closest('tr'), $sum = $row.prevAll('.sumToMe').first(), $rows = $sum.nextUntil('.sumToMe', '.sumToUp'), index = $this.closest('td').index();
    
    var sum = 0;
    $rows.each(function(){
        var val = $(this).find('td').eq(index).find('input').val();
        sum += (+val);
    })
    $sum.find('td').eq(index).find('input').val(sum);
});