Клуб API Карт

ListBox на карте

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

Здравствуйте, на карте разместил ListBox (раскрыващийся список) с переключателями, есть 3 вопроса:

1. Расположение списка на карте через addControl не работает (может что-то неправильно в коде)

2. Как можно повесить обработчики на каждый выбранный элемент (если флажок стоит или не стоит)

3. Возможно ли програмно переключить флажок (поставить галочку и обработать обработчик при загрузке карты)

 

Вот фрагмент кода, заранее спасибо:

 

 YMaps.jQuery(function ()  
        {   
        ...
            var listBox_poi = new YMaps.ListBox({ caption : "Выберите слой    " });
            listBox_poi.add(new YMaps.ListBoxToggleItem("  слой 1"));
            listBox_poi.add(new YMaps.ListBoxToggleItem("  слой 2"));
            listBox_poi.add(new YMaps.ListBoxToggleItem("  слой 3"));
            listBox_poi.add(new YMaps.ListBoxToggleItem("  слой 4"));
            listBox_poi.add(new YMaps.ListBoxToggleItem("  слой 5"));
            map.addControl(listBox_poi, new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT, new YMaps.Size(300, 5)));
            map.addOverlay(new YMaps.ToolBar([listBox_poi]));
        ...   
        });
 

 

 

6 комментариев
Sergey Konstantinov
28 января 2016, 06:08

1. Листбокс - не контрол, а элемент тулбара. Соответственно, нужно создать тулбар, добавить в него листбокс, и уже тулбар добавить на карту.

2. YMaps.Events.observe(item, item.Events.Select, function () {

// обработка события постановки галочки

});

item - экземпляр ListBoxToggleItem-а

3. item.select()

Кроме того, можно указывать состояние (есть галочка/нет галочки) вторым параметром конструктора.

1. спасибо, практически всё понятно кроме некоторых моментов... когда список свёрнут надпись (caption) видна не полностью, хотя свойство width указано

(текст при свёрнутом списке: "Выберите сло")

 

var listBox_poi = new YMaps.ListBox({ caption : "Выберите слой" },{ width : "350" });

listBox_poi.add(new YMaps.ListBoxToggleItem("слой 1", true));

listBox_poi.add(new YMaps.ListBoxToggleItem("слой 2"));

listBox_poi.add(new YMaps.ListBoxToggleItem("слой 3"));

listBox_poi.add(new YMaps.ListBoxToggleItem("слой 4"));

listBox_poi.add(new YMaps.ListBoxToggleItem("слой 5"));

toolbar_poi = new YMaps.ToolBar([listBox_poi]);

map.addControl(toolbar_poi, new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT, new YMaps.Size(200, 5)));

 

 

2. почитал справку по ListBoxToggleItem (вешаю обработчик, но не работает)

 

YMaps.Events.observe(listBox_poi, listBox_poi.Events.Select, function () 

{// обработка события постановки галочки

alert("Поставили галочку");

});

YMaps.Events.observe(listBox_poi, listBox_poi.Events.Deselect, function () 

{// обработка события снятия галочки

alert("Сняли галочку");

});

 

.....

поясните поподробней про обработку отдельного элемента...

Sergey Konstantinov
28 января 2016, 06:08

> когда список свёрнут надпись (caption) видна не полностью, хотя свойство width указано

Вероятно, либо ширины недостаточно, либо конфликт вёрстки.

> вешаю обработчик, но не работает

Обработчик вешается не на весь листбокс, а на конкретный пункт списка. В Вашем случае должно быть что-то типа

var item2 = new YMaps.ListBoxToggleItem("слой 2");

listBox_poi.add(item2);

YMaps.Events.observe(item2, item2.Events.Select, function () { alert('Item2 Select!') });

И так на каждый итем.

1. > либо конфликт вёрстки.

делаю разную width, не меняется, какой тег может конфликтовать?

2. разобрался, спасибо

3. Я немного не так сформулировал, необходимо когда флажок програмно активирован ( item.select() ) на нём есть обработчик.

 

...

YMaps.Events.observe(item, item.Events.Select, function () 

{

    alert("Слой загружен при загрузке карты!");

});

 

....

Можно ли этот обработчик выполнить при загрузке карты (если  item.select() ) или необходимо вешать другой Events при загрузке?

 


Sergey Konstantinov
28 января 2016, 06:08

> делаю разную width, не меняется, какой тег может конфликтовать?

a либо i

> Можно ли этот обработчик выполнить при загрузке карты (если  item.select() ) или необходимо вешать другой Events при загрузке?

 Можно, item.select() автоматически вызовет обработчики события Select.

спасибо за оперативные ответы... (+1)

осталось конфликт вёрстки убрать.