2009-12-10 7 views
0

양식을 제출하기 전에 jQuery 양식 플러그인을 사용하여 함수를 호출하고 있습니다. 이 함수는 Google 지오 코더 서비스를 호출하여 주소의 좌표를 찾고 양식의 숨겨진 좌표 필드 값을 설정합니다. beforeSubmit 콜백이 완료되기 전에 양식이 제출 된 것으로 보입니다. 그게 정상인가요? beforeSubmit 콜백이 완료 될 때까지 폼이 기다리지 않아야합니까? 어떻게해야할까요?jQuery 양식 플러그인 문제

감사

자바 스크립트

$(function(){ 
    $("#submit").click(function() { 
     var options = { 
      beforeSubmit: getPosition, // pre-submit callback 
      success:  showResponse // post-submit callback    
     }; 

     // bind form using 'ajaxForm' 
     $('#addresto').ajaxForm(options); 
    }); 
}); 

function getPosition() { 

    var geocoder = new GClientGeocoder(); 

    var country = $("#id_country").val(); 
    var city = $("#id_city").val(); 
    var postal_code = $("#id_postal_code").val(); 
    var street_number = $("#id_street_number").val(); 
    var street = $("#id_street").val(); 
    var address = street_number+", "+street+", "+postal_code+", "+city+", "+country; 

    geocoder.getLatLng(address, function(point) { 
     if (point) { 
      alert(point); 
      $("#id_latitude").val(point.lat()) 
      $("#id_longitude").val(point.lng()) 
     } else { 
      alert("Geocode was not successful"); 
     } 
    }); 
    return true; 
} 

function showResponse() { 
    alert('response'); 
} 

HTML

<form id="addresto" action="" method="POST"> 

<!-- some city, country, street... fields --> 

<input type="Submit" id="submit" value="Submit" /> 
</form> 

답변

2

@ 제이슨의 두 번째 해결책은 거의 모든 방법입니다.

연대적 :

  • 기본적으로 LatLongAvailable가 0 인 이름의 형태로 입력이
  • 사용자가 입력 한 위치 정보
  • jQuery를이 getLatLng(), getLatLng()는 값을 반환 양식을 발사 요소 LatLongAvailable이 1로 설정 됨
  • jQuery가 양식 필드 폴링을 시작하는 함수를 호출합니다. LatLongAvailable
  • 제출을 클릭하면 먼저 LatLongAvailabl 자바 스크립트가 a question I had에서 찾을 수 있습니다와 E는 == 1이 아닌 경우 양식을 폴링에

더 많은 정보를, 대기 기호를 보여이 1 인 경우, 모든 홀수 번째 시도에 계속 제출합니다.

2

나는 지오 코더의 getLatLng()가 비동기라고 생각합니다. 즉, return true; 행을 계속하기 전에 응답을 기다리지 않고 있음을 의미합니다. 그걸 염두에두고

, 주위 두 가지 방법이 기본적으로 있습니다 :

  1. 당신은 제출이 어느 주소에 대한 onchange를 이벤트 기간 동안 같은 트리거되기 전에 getLatLng()를 호출 및 제출에 대한 값을 저장할 수 있습니다 . 또는
  2. 아직 지오 코딩 응답이 있는지 여부를 알려주는 플래그를 추가 할 수 있으며, 아직 가지고 있지 않은 경우 beforeSubmit()에 return false;을 추가 할 수 있습니다. 그런 다음 응답을 받으면 코드에서 제출을 트리거 할 수 있습니다.
+0

좋은 대답은 바로 getLatLng()입니다. 솔루션 1은 약간 hackish하고 전적으로 방탄하지 않습니다. 예를 들어, 함수가 갑자기 오래 걸리고 그 전에 사용자가 제출하면 어떨까요? 새 답을 두 번째 해결 방법에 대해 자세히 설명합니다. –