2011-09-12 110 views
0

固定 - 见下:)JQuery验证规则不工作

我使用jQuery验证插件,由于某种原因,我不能得到它返回一个有效的领域 - 总是返回无效。

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

我可以看到地理代码请求赶回来,发现还是没有发现任何具体的地址,但验证仍然失败 - 如果我修改功能接下来,我会收到有关有效或无效地址的警告yes或警告no,但验证仍然失败。

    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

不管Ajax调用状态您的验证失败,因为从你的valid处理函数返回的值是零,不是真的还是假的。

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

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

+0

谢谢你,你认为我可以破解它,因为我有50多个字段。也许使用函数根据地理代码结果设置值为1或0的隐藏表单域,并根据该结果进行验证?或者我还会浪费我的时间。谢谢 –

+0

是的,那可以工作。触发您的ajax调用地理代码检查,然后在ajax响应处理程序中执行您所需的任何操作(根据响应将#地址字段标记为有效或无效)。 – WTK