Клуб API Карт

Стили ссылок destinations

Пост в архиве.
KirilkaGPS
6 ноября 2011, 00:06

1) Стили ссылок из контейнера не действуют на последний элеменнт контейнера  destinations в независимости от того какой это элемент.  в частности на 'aaдесfа' 

Пациент тут.

2) Как при переходе открыть балун, если он задан в xml файле в слое mk, и все что его обьеденяет с  destinations - координаты. (пример по ссылке "киев".)

 

  callback : function () {
        mk.openBalloon(

Не работает.

2.1) можно ли по сути брать координаты центра карты, смотреть есть ли точка с такими координатами в xml если есть открывать для нее балун.

3)Как обойти запрет:

Игнорируются атрибуты, отвечающие за вызов обработчиков событий

Атрибуты, отвечающие за вызов обработчиков событий (onclick, onchange, onkeypress и т. д.), удаляются из элементов вместе со своим содержимым.

Пример:

 

<div onclick="alert(\"XSS\")">$[name]</div>

 

заменяется на

 

<div>$[name]</div>

 

Ниже привожу код.

<head>
<script type="text/javascript">
        window.onload = function () {
            var map = new YMaps.Map(document.getElementById("YMapsID")
            destinations = {
                    'Киев' : new YMaps.GeoPoint(30.552502,50.448638),
                    'Петербург' : new YMaps.GeoPoint(30.313497,59.938531),
                    'Екатеринбург' : new YMaps.GeoPoint(60.617435,56.829748),
                    'Одесса' : new YMaps.GeoPoint(30.7058,46.466444),
                    'Одесrа' : new YMaps.GeoPoint(31.7058,43.466444),
                    'Одесfа' : new YMaps.GeoPoint(36.7058,36.466444),
                    'aaдесfа' : new YMaps.GeoPoint(38.7058,31.466444),
                };
            map.setCenter(new YMaps.GeoPoint(30.7058,46.466444), 17);
 // Ссылка на контейнер для меню
            var menuContainer = YMaps.jQuery('#mapMenu');
            // Генерирование меню
            for (var item in destinations) {
                // Используем замыкание, чтобы работать с конкретным свойством объекта
                (function (title, geoPoint) {
                                //Красим ссылки
                                menuContainer.find('a').css('color', '#575757');
                                menuContainer.find('a').css('color', '#575757');
                                menuContainer.find('a').css('margin-left', '690px'); 
                                menuContainer.find('a').css('position', 'relative');
                                menuContainer.find('a').css('top', '-450px');
                    // Создаем ссылку, обернутую в тег <p> для более приятного визуального восприятия
                    YMaps.jQuery("<li><a href=\"#\">" + item + "</a></li>")
                        .find('a')
                            // Создаем обработчик по щелчку на ссылке
                            .bind('click', function () {
                                
                                // Подчеркиваем все ссылки
                                menuContainer.find('a').css('text-decoration', 'underline');
                                                              
                                // Кроме той, на которую щелкнули
                                YMaps.jQuery(this).css('text-decoration', 'none');
                                
                                // Перемещаем карту
                                map.panTo(geoPoint, {flying:1}
                                return false;
                            })
                            .end()
                        
                        // Записываем элемент списка в список
                        .appendTo(menuContainer);
                })(item, destinations[item])
            }
map.addOverlay(mk);
map.addControl(new YMaps.ScaleLine()
        map.addControl(new YMaps.Zoom()
           map.enableScrollZoom(
YMaps.Events.observe(mk, mk.Events.Load, function (mk) {
    mk.get(0).forEach(function (obj) {
        obj.setBalloonOptions({
            margin: [10, 20, 30, 40], maxWidth:300
        }
    }
}
}
    </script>
</head>
<body>
<div id="YMapsID" style="width:680px;height:430px"></div>
<ul id="mapMenu"></ul>
</body>

 

4 комментария

 

1) Стили ссылок из контейнера не действуют на последний элеменнт контейнера  destinations в независимости от того какой это элемент.  в частности на 'aaдесfа' 

 

вы так сами напрограммировали

 

 //Красим ссылкиmenuContainer.find('a').css('color', '#575757');...

 

при каждой итерации по объекту вы зачем-то делаете поиск всех ссылок в menuContainer

и выставляете им стили.

при следующих итерациях вы опять ищете эти же ссылки и опять перезаписываете им теже стили - странная логика =)

к последнему не применяются потому что вы сначала ищете в menuContainer, а потом делаете append и последней ссылки в menuContainer еще нет

2.1) можно ли по сути брать координаты центра карты, смотреть есть ли точка с такими координатами в xml если есть открывать для нее балун.

например, проставить всем GeoObject-ам в xml аттрибут gml:id и хранить его в хэше 

 

3)Как обойти запрет:
например, jQuery.live

 

 

1)а как правильно сделать?)

 

1.1) кстати как там в сss задать свойство a:hover

1.2) как задать етому списку возможность формироватся в таблицу?) 

 

2.1)про ID читал уже, проставил их, но как их передать в обработчик .openballon немогу понять

3)jQuery не знаю) так что вопрос наверно отпадает)

 

 

1)а как правильно сделать?)

 

Например, вписать стили прямо в html-строчку передаваемую jQuery

 YMaps.jQuery("

  • " + item + "
  • ")

    или еще лучше положить их в класс в css-файл и этот класс прописать ссылке 

     

    2.1)про ID читал уже, проставил их, но как их передать в обработчик .openballon немогу понять

     

    YMapsML парсится в коллекцию (GeoObjectCollection)

    из которой можно получить конкретный плайсмарк по этому id методом filter

    1)Спасибо вопрос снят тут все понятно.

    2.1)Готов пообщатся дополнительно по поводу даного вопроса. напишите _Kirilka_@ukr.net (готов заплатить так как нет возможности и желания учить и разбираться)