2014-03-04 63 views
0

我有如下所示的脚本,并在http://jsbin.com/vuliw/1重复。jQuery验证插件和异步更新

输入#address经验证为(4)个或更多字符,并且在给定几个字符的情况下也会自动填充。

我的问题是在输入填充之前验证它。要复制,请输入几个字符(小于4),然后单击其中一个结果。虽然我的示例使用Google Maps API,但我希望能够通过任何异步更新来获得这些结果。

如何验证最小长度?用户选择一个项目后

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Validation</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script> 
     <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script> 
     <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.js" type="text/javascript"></script> 

     <script type="text/javascript"> 
      $(function(){ 
       address.value=''; 
       var validator=$("#myForm").validate({rules: {address: {"minlength": 4,"required":true}}}); 
       var autocomplete = new google.maps.places.Autocomplete(document.getElementById('address')); 
      }); 
     </script> 

    </head> 
    <body> 
     <form id="myForm" action="bla.php" method="post"> 
      <input id="address" name="address" type="text"> 
     </form> 

    </body> 
</html> 

回答

0
<script type="text/javascript"> 
     $(function(){ 
      address.value=''; 
      var validator=$("#myForm").validate({rules: {address: {"minlength": 4,"required":true}}}); 
      var autocomplete = new google.maps.places.Autocomplete(document.getElementById('address')); 
      google.maps.event.addListener(autocomplete, 'place_changed', function(){ 
       $("#myForm").valid(); 
      }); 
     }); 
    </script> 

重新运行验证。您可以使用由(place_changed)自动填充事件引导的有效()方法执行此操作。

+0

谢谢约翰,似乎工作,但我仍在测试。你能解释一下它如何让它起作用吗? – user1032531

+1

由于事情是异步的,您需要确保您的支票在Google完成其工作后发生。 G会触发一个事件(place_changed)来告诉您,这是从用户选择中自动填充列表中提取出来的。所以,如果我们确保在G完成后每次运行检查,它都不会干扰其他任何事情。最糟糕的是,你正在运行额外的不必要的检查,但这是由于validate()插件如何监听事件。这需要您在该库内部进行核心更改以删除ms或两个额外检查IFF用户选择自动完成项目。 –

+0

啊,我明白了。验证插件首先验证给定的元素并显示一个错误,然后Google做它的事情,然后整个表单被验证,但这次给定的元素不再显示错误。但是,表单上的其他元素将在用户需要查看错误之前进行验证。可以只使用'$(“#myForm”)。valid(“address”);'?我试过但没有运气。 – user1032531