Форма содержит элемент ввода. Введенное значение проверяется с помощью обратного вызова сервера от размытия
событие andler.
Если введено неправильное значение и нажата кнопка отправки, форма отправляется с неверным значением:
Метод проверки не завершен, но выполнен метод действия отправки формы.
Как заставить метод Validate () быть завершенным до выполнения метода отправки формы?
Используются jquery, jqueryUI, ASP .NET MVC2.
<form id="Form" class='form-fields' method='post' action='/Report/Render'>
<input id='test' name='test' value='test' />
<input id='_submit' type='submit' value='Show report' />
</form>
$('#test').bind({
blur: function (e) {
if (!Validate(e.target)) {
cancel(e);
}
}
});
Обновление
Как требуется в комментарии BobTodd, здесь используется метод validate:
function Validate(elem) {
var i,
res;
$.ajax('Grid/Validate' );
{
data: $("#Form").serializeArray(),
//async: false,
type: 'POST',
error: function (jqXHR, textStatus, errorThrown) {
elem.skipBlur = true;
errorMessage(decodeErrorMessage(jqXHR.responseText === undefined ? '' : jqXHR.responseText,
textStatus, errorThrown));
elem.focus();
elem.select();
elem.skipBlur = false;
elem.ischanged = true;
res = false;
},
success: function (data) {
elem.ischanged = false;
for (i = 0; i < data.length; i += 1) {
$('#' + data[i].name).val(data[i].value);
}
res = true;
}
});
return false; // res;
}
Update2
Во всех ответах предлагается запретить запуск метода отправки, если проверка не выполнена. Это обеспечивает очень плохой пользовательский опыт: проверка занимает некоторое время. Пользователь должен нажать два раза в кнопке отправки для отправки формы. Как разрешить отправку формы одним кликом? Maksing Validate () метод синхронизации все это, но я не уверен, что использует разумное решение для синхронизации вызова.