I have just worked through it myself.
My solution is below - I did a small test app to sort it.
I am sure there are more elegant ways to solve it but this worked for me.
Model
db.define_table('additup',
Field('number1','integer', default = 0),
Field('number2','integer',default = 0),
Field('number3','integer', default = 0),
Field('total','integer'))
Controller
def index():
form = SQLFORM(db.additup)
return locals()
View
{{extend 'layout.html'}}
{{=form}}
<script>
jQuery("input[name='number1'],input[name='number2'],input[name='number2']").change(function()
{
jQuery("input[name='total']").val(parseInt(jQuery("input[name='number1']").val())+parseInt(jQuery("input[name='number2']").val())+parseInt(jQuery("input[name='number3']").val()));
});
</script>