Добрый день.

Есть такая проблема: в диалоговом окне есть листбокс мультиселектовый. Я его динамически заполняю посредством appendItem(), после этого через addItemToSelection() выбираю некоторые элементы. Список длинный, со скроллом и проблема в том, что элементы, видимые (на первой "странице") - визуально выделяются (подсвечиваются), все элементы, которых изначально не видно - визуально не выделяются и при клике на них элемент не подсвечивается как выделенный, хотя внутренне они выделяются/снимается выделение.

Поведение элемента весьма странное, у кого-нибудь есть идеи в чем тут дело?

есть идеи в чем тут дело

нет такой идеи, есть идея по workaround: выделять элементы списка посредством item. setAttribute ("selected", "true")

Anton пишет

есть идеи в чем тут дело

нет такой идеи, есть идея по workaround: выделять элементы списка посредством item. setAttribute ("selected", "true")

Я пробовал ручками создавать menuitem, делать ему selected = true, после этого эти элементы были таки выбраны, но selection с них не снимался:)

А если вызывать перед addItemToSelection метод ensureElementIsVisible ? Вроде работает.

Спасибо, стало лучше. Но не во всех случаях такая комбинация срабатывает, то есть периодически появляются вот такие не выделенные визуально элементы. Пока не могу уловить закономерность.

У меня аналогичная проблема ;) Решения пока не нашли ? :)

Codeblight пишет

У меня аналогичная проблема ;) Решения пока не нашли ? :)

В данном случае, я выкрутился с помощью type="checkbox" у menuitem.

foxthrot пишет
Codeblight пишет

У меня аналогичная проблема ;) Решения пока не нашли ? :)

В данном случае, я выкрутился с помощью type="checkbox" у menuitem.

Мне к сожалению такой вариант не подойдет, т.к. надо обычный листбокс не мультиселектовый. Пробовал выделять вручную элементы атрибутом selected  - "заглохшие" не выделяются. :(

Зря я кстати панику поднял ;) если выделять так, то все работает

Выделить код

Код:

var my_list = document.getElementById('my_search_select');
	var items = my_list.getElementsByTagName('listitem');

	for (var i = 0; i < items.length; i++)
	{
		if (items[i].getAttribute('value') == my_id)
		{
			my_list.scrollToIndex(i);
			my_list.selectItem(my_list.getItemAtIndex(i));
			break;
		}
	}

Причем если написать items[i].value - то браузер ругается на запредельный индекс и еще чего-то там ;) хотя если 2 раза сделать одно и то же - то начинает тоже работать ;0)

Codeblight пишет

Зря я кстати панику поднял ;) если выделять так, то все работает

Выделить код

Код:

var my_list = document.getElementById('my_search_select');
	var items = my_list.getElementsByTagName('listitem');

	for (var i = 0; i < items.length; i++)
	{
		if (items[i].getAttribute('value') == my_id)
		{
			my_list.scrollToIndex(i);
			my_list.selectItem(my_list.getItemAtIndex(i));
			break;
		}
	}

Причем если написать items[i].value - то браузер ругается на запредельный индекс и еще чего-то там ;) хотя если 2 раза сделать одно и то же - то начинает тоже работать ;0)

эээээ, если не мультиселектовый листбокс, то достаточно листбоксу в value записать искомое  значение, а он сам выберет нужный элемент

эээээ, если не мультиселектовый листбокс, то достаточно листбоксу в value записать искомое  значение, а он сам выберет нужный элемент

Ну да, так я и делал... элемент для FF выбран, но не подсвечен (и не подсвечивается больше хоть закликайся). Проскрул для него до селекшина ничего не дает. Мой способ описанный выше глючит меньше но точно так же глючит (закономерности не нашел).