Как я могу получить форму для отправки только после обновления скрытых значений из сервиса Google Geocoder? - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть форма, в которой будет введен адрес, и я хочу сохранить связанные координаты в моей базе данных.Когда у меня есть отдельная кнопка для геокодирования, она работает нормально с точки зрения обновления скрытых значений в моей форме.Затем я нажимаю отдельную кнопку отправки, значения сохраняются так, как я хочу.

Что я действительно хочу, так это нажать одну кнопку, которая возвращает координаты и отправляет форму после того, как эти значения были получены и кодУ меня ниже, кажется, не выполнить это.

<script type="text/javascript">
var geocoder;
geocoder = new google.maps.Geocoder();
function codeAddress() {
  var address = document.getElementById("place_name").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        document.getElementById("place_coordinates").value = results[0].geometry.location;
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  // document.forms["new_place"].submit();
}
</script>
<!-- the form -->
<input type="button" value="Submit" onclick="codeAddress()">

В настоящее время форма отправляется, но без скрытых значений "place_coordinates" отправка с формой.Помощь очень ценится

1 Ответ

1 голос
/ 27 декабря 2011

Если вы отмените отправку формы по умолчанию, а затем отправите ее самостоятельно из функции обратного вызова вызова геокодирования, это должно сработать.

Вместо того, чтобы обрабатывать нажатие кнопки, обработайте событие отправки формы, убедившись, что возвращено false, чтобы отменить отправку по умолчанию (в этом случае я возвращаю результат функции, поэтому убедитесь, что функция возвращает false ):

<form onsubmit="return codeAddress(this);">

<script>
var geocoder;
geocoder = new google.maps.Geocoder();
function codeAddress(theForm) {
  var address = document.getElementById("place_name").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        document.getElementById("place_coordinates").value = results[0].geometry.location;
        theForm.submit();
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });

  return false;
}
</script>

Обратите внимание, что я поместил отправку формы в ветку OK вашего if / else, поэтому форма не будет отправлена, если геокод был неудачным. Очевидно, что вы можете переместить это в другой случай, но все еще в функции обратного вызова, если хотите продолжить и отправить в любом случае.

Кроме того, обратите внимание, что я передаю ссылку на форму в функцию - вам не нужно это делать, но я думаю, что она аккуратнее.

...