簡體   English   中英

如何在表單級服務器端驗證中使用jQuery Validation插件?

[英]How to use jQuery Validation plugin with form-level server-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_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方法。

我想我從Validator / showErrors的文檔中找到了它

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

做了。 編寫一個可以隨心所欲的插件 或者如果你變得復雜,只需編寫一個javascript函數來執行它並調用它。

我會寫一個插件來創建一個div,用錯誤文本填充它並很好地制作動畫。

在提交表單時,我會在頁面上使表單的目標成為一個不可見的iframe,然后使用它的結果調用topWindow中的函數。

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

然后在iframe的頁面中調用頂部窗口中的javascript方法,該方法重定向成功或顯示錯誤。

在iframe中

<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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM