You should only really bother reading this post if you are avoiding implementing some of the already powerful form validation plugins available to you as mentioned by other answers.
You could do something like this: http://jsfiddle.net/gnarf/NmpaM/3/
function checkForms() {
var rempty = /^\s*$/,
remail = /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/,
// narrow the scope of the check when called as an event handler
check = (this.nodeType) ? $(this).closest('tr') : $('tr');
check.each(function() {
var $row = $(this),
$inputs = $row.find("input.text_field"),
$btn = $row.find('input.button[name="commit"]'),
$email = $row.find('input[name="email"]'),
numempty = $inputs.filter(function() {
return rempty.test(this.value);
}).length;
if (numempty > 0 || !remail.test($email.val())) $btn.attr('disabled', 'disabled');
else $btn.removeAttr('disabled');
});
}
checkForms();
// just so it updates everytime the input changes:
$("input").bind('change keyup', checkForms);