Клуб API Карт

Не работает поиск в Яндекс-картах

Пост в архиве.
chekostroy
9 июня 2009, 11:28

Карты сами работают, но не работает поиск. 
Вот код:
<META http-equiv="Content-Type" content="text/html">
  <META http-equiv="X-UA-Compatible" content="IE=7">
  <SCRIPT src="http://api-maps.yandex.ru/1.0/?key=AJndH0oBAAAAD3E_OQMAQJehtAXRK8KawEjzNj6A8q9qgtUAAAAAAAAAAADqEpx3ciGVDhn17Ib657P-W4Sb4A==" mce_src="http://api-maps.yandex.ru/1.0/?key=AJndH0oBAAAAD3E_OQMAQJehtAXRK8KawEjzNj6A8q9qgtUAAAAAAAAAAADqEpx3ciGVDhn17Ib657P-W4Sb4A==" type="text/javascript"></SCRIPT>

  <SCRIPT type="text/javascript">
  window.onload = function () {
  var map = new YMaps.Map(document.getElementById("YMapsID"));
  map.setCenter(new YMaps.GeoPoint( 47.24, 56.14 ), 12, YMaps.MapType.MAP);

map.addControl(new YMaps.TypeControl(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT));
map.addControl(new YMaps.Zoom());
  };

function showAddress (value) {
  // Удаляем все оверлеи
  map.removeAllOverlays(); 
  // Запускаем процесс геокодирования
  var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
   
  YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
  //Если поиск прошел без ошибок и найден хотя бы один результат
  if (this.length()) { 
  // Добавляем оверлей на карту
  map.addOverlay(this.get(0));
  this.get(0).setBalloonContent(this.get(0).text);
  // Открываем балун
  this.get(0).openBalloon(); 
  }else {
  alert("Ничего не найдено")
  }
  });
 
  // Если при геокодировании произошла ошибка, то сообщаем о ней
  YMaps.Events.observe(geocoder, geocoder.Events.Fault,
  function (error) {alert("Произошла ошибка: " + error.message)});
}

  </SCRIPT>



  <DIV id="YMapsID" style="height:400px; width:600px;"></DIV>
<!-- Start Gem Insert your own HTML -->
<CENTER><DIV id="YMapsID" style="width:400px;height:500px"></DIV>

<FORM action="#" onsubmit="showAddress( this.address.value );return false;">
  <P>
  <INPUT id="address" style="width:725px;" value="Москва">
  <INPUT type="submit" value="Искать">
  </P>
   
  <DIV id="YMapsID" style="height:200px; width:800px;"></DIV>
</FORM>
<A href="javascript:showAddress('Чебоксары, ул.Сверчкова, д.8')">Чебоксары, ул.Сверчкова, д.8</A>
<DIV> 
При нажатии на кнопку "Искать" ничего не происходит, консоль выдаёт ошибку:
JavaScript - http://www.mysite.com/2009-05-29-13-17-25?
Event thread: submit
Error:
name: ReferenceError
message: Statement on line 12: Undefined variable: map
Backtrace:
  Line 12 of inline#3 script in http://www.mysite.com/2009-05-29-13-17-25?: In function showAddress
  map.removeAllOverlays(); 
  Line 1 of function script 
  showAddress( this.address.value );return false;
  ...
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

5 комментариев
Конечно не происходит, а почему должно?
Поиск произойдет, если нажать на ссылку "Чебоксары, ул.Сверчкова, д.8". Если Вы хотите, чтобы поиск произошел по нажатию кнопки - повесьте на кнопку обработчик.

А как же

?

Ну и всё-таки даже по клику на ссылку "Чебоксары, ул.Сверчкова, д.8" поиск тоже не работает.

вынесите объявление переменной map из функции init

var map;

function init() {
   map = new YMaps.Map(document.getElementById("YMapsID"));

и т.д.

То есть сделать так:

нет, не так. просто объявить map вне функции инициализации

var map;

window.onload = function () {
  map = new YMaps.Map(document.getElementById("YMapsID"));
  map.setCenter(new YMaps.GeoPoint( 47.24, 56.14 ), 12, YMaps.MapType.MAP);

...
}