2014-07-23 49 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

它沒有爲我工作,它仍然繼續提交頁面,有什麼想法? –

相關問題