jQuery Validation ,調用valid方法時,不驗證remote

一、問題描述

model代碼以下:javascript

image

remote對應的action以下:java

image

view代碼以下:jquery

image

 

 

單擊按鈕時,執行以下動做ajax

image

當點擊按鈕時,咱們發現,雖而後臺action驗證失敗,但image 仍是執行返回true,目測是由於remote驗證採用的ajax 異步方式,image並不等待remote的執行驗證,因此返回了true。異步

二、解決方法

 

<script type="text/javascript">
        var intervalPending = null;
        function remoteCheck() {
            var validator = $("form").data("validator");
            alert(validator.pendingRequest);
            if (validator.pendingRequest == 0) {
                // requests are done
                // clear interval

                clearInterval(intervalPending);
                // re-enable our "submit" button

                // "click" the hidden button
                if ($("form").valid()) {
                    alert(111);
                }
            }
            // we will try again after the interval passes
        }
        $(function () {
            $("#test").click(function () {
                intervalPending = setInterval('remoteCheck()', 1000);
            })
        })
    </script>

 

 

 

 

 

 

 

三、原理說明

咱們須要解決的問題是,在執行$("form").valid()時等待remote的執行。async

思路以下:spa

  • 一、使用
$("form").data("validator").pendingRequest

 

來肯定remote是否執行完畢(remote所有執行完畢以後,$("form").data("validator").pendingRequest的值爲0)3d

二、建立一個計時器,code

intervalPending = setInterval('remoteCheck()', 1000);

每隔一秒鐘就判斷一次remote的執行狀況,是否已經所有執行完畢,當執行完畢以後,清除計時器,執行咱們本身的動做,不然,繼續循環判判斷。orm

 

四、參考連接

http://stackoverflow.com/questions/7840634/how-to-get-unobtrusive-jquery-remote-validator-to-perform-async

相關文章
相關標籤/搜索