jQuery Validation ,调用valid方法时,不验证remote 1、问题描述 2、解决方法 3、原理说明 4、参考链接

model代码如下:

jQuery Validation ,调用valid方法时,不验证remote
1、问题描述
2、解决方法
3、原理说明
4、参考链接

remote对应的action如下:

jQuery Validation ,调用valid方法时,不验证remote
1、问题描述
2、解决方法
3、原理说明
4、参考链接

view代码如下:

jQuery Validation ,调用valid方法时,不验证remote
1、问题描述
2、解决方法
3、原理说明
4、参考链接

单击按钮时,执行如下动作

jQuery Validation ,调用valid方法时,不验证remote
1、问题描述
2、解决方法
3、原理说明
4、参考链接

当点击按钮时,我们发现,虽然后台action验证失败,但jQuery Validation ,调用valid方法时,不验证remote
1、问题描述
2、解决方法
3、原理说明
4、参考链接 还是执行返回true,目测是因为remote验证采用的ajax 异步方式,jQuery Validation ,调用valid方法时,不验证remote
1、问题描述
2、解决方法
3、原理说明
4、参考链接并不等待remote的执行验证,所以返回了true。

2、解决方法

<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>

3、原理说明

我们需要解决的问题是,在执行$("form").valid()时等待remote的执行。

思路如下:

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

来确定remote是否执行完毕(remote全部执行完毕之后,$("form").data("validator").pendingRequest的值为0)

2、创建一个计时器,

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

每隔一秒钟就判断一次remote的执行情况,是否已经全部执行完毕,当执行完毕之后,清除计时器,执行我们自己的动作,否则,继续循环判判断。

4、参考链接

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