Ну, я бы так и сделал:
function validate (form)
{
// return false if some fields are not right
}
function setup_form_validation (form)
{
form.addEventListener (
'submit',
function (f) { // closure to pass the form to event handler
return function (evt) {
if (!validate (f)) evt.preventDefault();
// Return status doesn't work consistently across browsers,
// and since the default submit event will not be called in case
// of validation failure, what we return does not matter anyway.
// Better return true or nothing in case you want to chain other
// handlers to the submit event (why you would want do that is
// another question)
};
} (form),
false);
}
Я бы предпочел логическое значение, содержащее статус проверки формы.Лучше обновлять статус каждый раз при изменении поля, чем проверять только когда пользователь пытается отправить всю форму.
И, конечно, это не удастся в IE8 и других старых браузерах.Вам понадобится еще один слой абстракции кровавых событий, чтобы он работал везде.