Как использовать плагин проверки jQuery с проверкой на стороне сервера на уровне формы? - PullRequest
12 голосов
/ 09 августа 2011

Какой лучший способ вызвать ошибки в элементах для ошибок проверки на стороне сервера, которые возвращаются после того, как форма прошла первоначальную проверку на стороне клиента?

$("#contact_form").validate({
  submitHandler: function(form) {
    $.ajax({
      type: 'POST',
      dataType: 'json',
      url: '/contact/send',
      data: $(form).serialize(),
      success: function(response) {
        if(response.error) { //server came back with validation issues
          var fields = response.fields;
          for(var i=0, var len = fields.length; i < len; i++) {
            var field_name = fields[i].name;
            var field_error = fields[i].error;

            // TRIGGER ERROR ON AFFECTED ELEMENT

          }
          return false;
        }
        //everything went ok, so let's show a thanks message
        showThanks();
      }
    }
});

Я думаю что-то вроде:

$(form).find("[name='" + field_name + "']").triggerError(field_error);

Но я не видел никаких API-методов для ручного запуска ошибок таким образом.

Ответы [ 3 ]

15 голосов
/ 09 августа 2011

Мне кажется, я понял это из документации Validator / showErrors

var validator = $("#contact_form").validate();
validator.showErrors({"state": "Bad state."});
0 голосов
/ 09 августа 2011

При отправке формы я бы сделал цель формы невидимым iframe на странице, который затем вызвал бы функцию в topWindow с ее результатом.

<iframe id="subject_frame" name="submit_frame" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe> 

затем на странице в iframe вызовите метод javascript в верхнем окне, который либо перенаправляет при успешном завершении, либо отображает ошибки.

В кадре

<script language="javascript" type="text/javascript">
   window.top.window.submitComplete("<?php echo $response; ?>");
</script>   

В верхнем окне (как пример)

function uploadComplete( result ){
    $.unblockUI();
    if(result == "OK"){
        $.blockUI({ message: "<span style='color:green;'>File upload successful, request submitted.</span><br/><br/>Redirecting..." }); 
        setTimeout(function() { 
            $.unblockUI({ 
                onUnblock: function(){ window.location='thankyou.php'; } 
            }); 
        }, 2000);

    } else {
        $.blockUI({ message: "<span style='color:red;'>Failed.</span><br/><br/>"+result }); 
        $('.blockOverlay').attr('title','Click to remove').click($.unblockUI);
    }
}
0 голосов
/ 09 августа 2011

Сделай это. Напишите плагин , который будет делать все, что вы хотите.Или, если вам сложно, просто напишите для этого функцию javascript и вызовите ее.

Я бы написал плагин, который бы создавал div, заполнял его текстом ошибки и красиво анимировал.

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