JQuery验证规则不起作用

时间:2011-09-12 09:54:39

标签: javascript jquery jquery-validate

修正 - 见下文:)

我正在使用jQuery validate插件,由于某种原因我不能让它返回有效字段 - 总是返回无效。

http://plugins.jquery.com/project/jqueryvalidate

这就是我所拥有的

        $(function(){
            $("#address").validate({
                valid: function(val){
                    $.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
                    function(data, textStatus)
                    {
                        if(data.Status.code=='200')
                        {
                            return true;
                        }else{
                            return false;
                        }
                    });

                },
                errorMessage: function(val){
                    return "must geo code";
                },
                appendCompletionIcon: true
            });
        });

我可以看到GEO代码请求返回发现或找不到任何特定地址,但验证仍然失败 - 如果我按如下方式修改函数,我会得到警告是或警告否有效或无效地址,但验证仍然失败。

                    function(data, textStatus)
                    {
                        if(data.Status.code=='200')
                        {
                            alert('yes');
                            return true;
                        }else{
                            alert('no');
                            return false;
                        }
                    });

任何帮助将不胜感激


我找到了解决这个问题的方法,它不是非常漂亮,因为需要完成两个地理代码调用。对我的目的来说足够好了。

var geocode = false;
function geoadd()
{
    $.getJSON("http://maps.google.com/maps/geo?q="+ $("#address").val() +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
    function(data, textStatus)
    {
        if(data.Status.code=='200')
        {
            geocode = true;
        }else{
            geocode = false;
        }
    });
}

        $(function(){
            $("#address").validate({
                valid: function(val){
                    geoadd();
                    return geocode;
                },
                errorMessage: function(val){
                    return "must not be blank";
                },
                appendCompletionIcon: true
            });
        });

1 个答案:

答案 0 :(得分:1)

无论ajax调用状态如何,您的验证都会失败,因为从valid处理程序返回的值为null,不是true或false。

ajax的完整处理程序返回true或false值,这与从valid函数返回true / false值不同。

要解决此问题,您必须进行同步ajax调用(我不推荐它,因为它在等待响应时锁定用户界面)或更改其他支持使用ajax进行验证的验证插件调用