Клуб API Карт

Функция JS в setBalloonContent

Пост в архиве.

 Доброе время суток.
Заранее прошу прощения, если вопрос покажется вам тупым. Я новичок в этом деле.
Мне нужно внутри балуна сделать 3 ссылочных поля, при нажатии на которые будет показываться некоторая информация.
Я пишу так:
  placemark.setBalloonContent('<script type="text/javascript" function ddd(name) {document.getElementById(&#039desc&#039).style.display=&#039none&#039;'+
  'document.getElementById(&#039contact&#039).style.display=&#039none&#039;'+
  'document.getElementById(&#039photo&#039).style.display=&#039none&#039;'+ 
  'document.getElementById(name).style.display=&#039block&#039; } </script>'+
  '<a href="javascript:ddd(&#039desc&#039);">Описание</a> '+
  '<a href="javascript:ddd(&#039contact&#039);">Контакты</a> '+
  '<a href="javascript:ddd(&#039photo&#039);">Фото</a>'+ 
  '<div id="desc" style=" display: none;">11111</div>'+
  '<div id="contact" style="display:none;">2222</div>'+
  '<div id="photo" style="display:none;">3333</div>');


При нажатии выдает ошибку «ddd is not defined»

Если я пишу эту функцию на пределами setBalloonContent, вот так:

function ddd(name) {document.getElementById(‘desc’).style.display='none';
  document.getElementById('contact').style.display='none';
  document.getElementById('photo').style.display='none'; 
  document.getElementById(name).style.display='block'; }

  function AddSightInVisual(name, desc, contact, x, y)
  {
  var placemark = new YMaps.Placemark(new YMaps.GeoPoint(x,y), {draggable: true});
  placemark.name = name;
  placemark.description = desc;
  placemark.setBalloonContent('<script type="text/javascript" function ddd(name) {document.getElementById(&#039desc&#039).style.display=&#039none&#039;'+
  'document.getElementById(&#039contact&#039).style.display=&#039none&#039;'+
  'document.getElementById(&#039photo&#039).style.display=&#039none&#039;'+ 
  'document.getElementById(name).style.display=&#039block&#039; } </script>'+
  '<a href="javascript:ddd(&#039desc&#039);">Описание</a> '+
  '<a href="javascript:ddd(&#039contact&#039);">Контакты</a> '+
  '<a href="javascript:ddd(&#039photo&#039);">Фото</a>'+ 
  '<div id="desc" style=" display: none;">11111</div>'+
  '<div id="contact" style="display:none;">2222</div>'+
  '<div id="photo" style="display:none;">3333</div>');

Функция срабатывает, но только если балун закрыть и потом открыть.

Заранее благодарна за ответы.



6 комментариев
Функция ddd должна быть определена как глобальная.
Если не получится разобраться, то дайте ссылку на страницу.

Т.е. примерно так:

Я попробовала так:

  placemark.setBalloonContent( ''+ 
  'Описание> '+
  '
Контакты '+
  'Фото'+ 
  '11111'+
  '2222'+
  '3333');

Ошибка сохраняется «ddd is not defined», что я делаю не так?

 

Не нужно писать подключение скрипта в содержимое балуна.

Вот пример создания метки, в которой есть ссылка на глобальную функцию:

alert у меня и раньше срабатывал сразу :(

а 'document.getElementById(...).style.display=... почему-то только при переоткрытии балуна :(

Дайте ссылку на страницу.

Заработало!

Вот окончательный вариант, вдруг кому пригодится:

  function ddd(name) {
  document.getElementById('desc').style.display='none';
  document.getElementById('contact').style.display='none';
  document.getElementById('photo').style.display='none'; 
  document.getElementById(name).style.display='block'; } 
   
  function AddSightInVisual(name, desc, contact, x, y)
  {
  var placemark = new YMaps.Placemark(new YMaps.GeoPoint(x,y), {draggable: false});
  placemark.name = name;
  placemark.description = desc;
  placemark.setBalloonContent( 
  'Описание> '+
  '
Контакты '+
  'Фото'+ 
  '11111'+
  '2222'+
  '3333');
  map.addOverlay(placemark);