2014-07-23 50 views
0

我有一个在提交时验证的表单,在表单内部调用一个函数,提交继续,不等待函数完成。我该如何解决?完成函数在继续之前执行

var clientaddress=false; 

function checkaddress(callback){ 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status != google.maps.GeocoderStatus.OK) { 
      clientaddress=false; 
      callback(false); 
     } 
     else if (status == google.maps.GeocoderStatus.OK) { 
      clientaddress=true; 
      callback(false); 
     } 
    } 

jQuery(document).ready(function(){ 
    jQuery("#submitOrder").submit(function(){ 
     checkaddress(function(result) { 

        if (!result) { 
         jAlert("Please enter a valid address!"); 
         jQuery("#address").focus(); 
         isValidation = 0; 

        } 
       }); 

     //other validation code that gets executed without waiting for checkaddress() 
     //submit page 
    }) 

我试图做一个函数调用地址检查器和验证函数,但他们仍然不会彼此等待。

我该如何解决这个问题?

+2

checkAddress的结果是'异步'(这意味着它可以在将来随时返回,因此不会阻止其他代码继续进行),因此您必须从'function(results,st atus){...'然后继续验证和潜在提交。 –

回答

2

因为geocode函数是异步的!使用回调:

function checkaddress(callback){ 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status != google.maps.GeocoderStatus.OK) { 
      callback(false) 
     } else if (status == google.maps.GeocoderStatus.OK) { 
      callback(true) 
     } 
    }); 
} 

然后用这个类似:

checkaddress(function(result) { 
    if (result) { 
     //result true! 
    } else { 
     //result false! 
    } 

    //REST OF YOUR CODE GOES HERE, IF PUT OUTSIDE IT WILL EXECUTE WHILE CHECKADDRESS IS IN PROGRESS 
}); 

submit功能也最有可能运行默认行为,使用preventDefault

jQuery("#submitOrder").submit(function(e){ 
    e.preventDefault(); 
    //code 
}); 
+1

对OP的说明:对于更干净的代码(IMO),您可以:'回调(状态== google.maps.GeocoderStatus.OK)'。 –

+0

这让回调更加清晰,谢谢! – Mike

+0

它没有为我工作,它仍然继续提交页面,有什么想法? –

相关问题