开发者

How to use jQuery Validation plugin with form-level server-side validation?

What's the best way to trigger errors on elements for server-side validation errors that come back after the form passes the initial client-side validation?

$("#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_开发者_如何学Cerror = fields[i].error;

            // TRIGGER ERROR ON AFFECTED ELEMENT

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

I'm thinking something like:

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

But I didn't see any api methods for manually triggering errors in that manner.


I think I figured it out from the documentation of Validator/showErrors

var validator = $("#contact_form").validate();
validator.showErrors({"state": "Bad state."});


Make it. Write a plugin that will do whatever you want. Or if you get to complicated, simply write a javascript function to do it and call that.

I would write a plugin that would create a div, fill it with the error text and animate it nicely.


On submit of the form, I would make the target of the form an invisible iframe on the page which would then call a function in the topWindow with it's result.

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

then in the page in the iframe call a javascript method in the top window that either redirects on success or displays the errors.

In the iframe

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

In the top window (as an example)

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜