Функция геокодирования работает при вызове в инициализированном, но не в скрипте onclick - PullRequest
0 голосов
/ 04 декабря 2009

Я занимаюсь геокодированием с использованием API карт Google. Пользователь заполняет форму с некоторым адресом, и когда нажимается кнопка отправки, вызывается функция codeAddress (), которая должна выполнять геокодирование, но она не работает. В качестве теста я жестко закодировал адрес и вызвал функцию codeAddress, когда документ в initialize (). Когда codeAddress вызывается, когда страница готова, она работает нормально, но когда она вызывается сценарием onclick, она не работает (никаких ошибок не возвращается firebug!).

Кто-нибудь может помочь? Спасибо

(вы можете вставить код здесь: http://code.google.com/apis/ajax/playground/?exp=maps#map_simple, или изменить ключ API Google)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps API Sample</title>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"></script>
<script type="text/javascript">

function initialize() {
  if (GBrowserIsCompatible()) {

    var map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(37.4419, -122.1419), 13);

    codeAddress(); 
  }

}

function codeAddress() {
    var geocoder = new GClientGeocoder();
    var address = "paseo montjuic, 30, barcelona, spain";
    geocoder.getLatLng( address, function(point) {

        if (point) {
            alert(point);
        } else {
            alert("Geocode was not successful");
        }
     });
 }


</script>
</head>
<body onload="initialize()" onunload="GUnload()" style="font-family: Arial;border: 0 none;">
<div id="map_canvas" style="width: 500px; height: 300px"></div>


<form action="" method="POST">
<!-- stuff -->
<input type="Submit" value="Submit" onclick="codeAddress();" />
</form>

</body>
</html>

1 Ответ

1 голос
/ 04 декабря 2009

Смотрит на меня сразу после вызова codeAddress(); для события onclick, ваш POST выполняется немедленно. Таким образом, вам кажется, что код не удался, но на самом деле он работает.

Что вы можете сделать, это:

1) Удалите форму, просто кнопку, используя событие onclick. Пример:

<input type="button" value="Submit" onclick="codeAddress();" />

2) Отключить отправку формы, когда событие ударит по клику, добавив return false;. Пример:

<form action="" method="POST">
<!-- stuff -->
<input type="Submit" value="Submit" onclick="codeAddress();return false;" />
</form>
...