Как выполнить проверку на стороне сервера перед отправкой - PullRequest
0 голосов
/ 29 сентября 2011

Форма содержит элемент ввода. Введенное значение проверяется с помощью обратного вызова сервера от размытия событие 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 () метод синхронизации все это, но я не уверен, что использует разумное решение для синхронизации вызова.

Ответы [ 4 ]

0 голосов
/ 29 сентября 2011

Когда вы проверяете поле, добавьте класс valid к элементу, если он действителен.Затем при отправке формы просто проверьте, все ли поля имеют этот класс:

$('#Form').submit(funciton(e){
    $(this).find('input').length == $(this).find('input.valid').length || e.preventDefault();
});
$('#Form input').bind({
    blur: function (e) {
        if(Validate(e.target))
           $(e.target).addClass('valid');
        else  
           $(e.target).removeClass('valid');
    }
});
0 голосов
/ 29 сентября 2011

Просто отключите кнопку отправки, пока проверка не будет завершена.

0 голосов
/ 29 сентября 2011

Не лучше ли связывать этот jquery с событием отправки формы, в противном случае это просто, когда пользователь покидает текстовое поле ...

$('.form-fields').bind({
        submit: function (e) {
            if (!Validate(e.target)) {
                cancel(e);
            }
        }
    });
0 голосов
/ 29 сентября 2011

Вам нужно будет повторно запустить метод Validate при отправке формы и отменить его там.

Посмотрите на плагин jQuery Validate, он поддерживает методы удаления, которые работают очень легко с mvc.

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

http://docs.jquery.com/Plugins/Validation/Methods/remote#options

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...