2010-08-05 1 views
0

Я хотел бы выбрать список выбора в зависимости от ширины, необходимой для выбранного индекса (строки). Скажем, например, у меня есть список с 3 строками, короткий, средний, loooooong; Я не хочу, чтобы список выбора автоматически был таким же широким, как и его самый большой элемент, но он должен быть таким же широким, как и выбранный элемент.Динамически размер списка выбора (Safari)

Первый метод, который я пробовал: document.getElementById('selectList').style.width = (selectedText.length * 6) + 'px'; где selectedText - строка, а 6 - плохая оценка ширины символа. Без моноширинного шрифта это работает неправильно.

Следующий методом, который я попытался был установить innerHTML из выключенного экрана DIV (вверху: -9999px) к выбранному индексу, а затем: document.getElementById('selectList').style.width = document.getElementById('hiddenDiv').offsetWidth; Проблемы этого метода состоит в том, что ширина тоже не правильно, некоторые действительно длинные строки сделали путь списка выбора длинным по сравнению с фактической выбранной строкой.

Любые идеи о том, как я могу динамически сортировать этот список выбора на основе ширины/длины строки?

+0

Вы хотите, чтобы элемент, чтобы изменить его ширину, то есть все, что справа на той же строке будет прыгать, или только часть выпадающий? –

ответ

1

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

Demo

+0

Я только что понял, что использовал jQuery для демонстрации, и вы не упомянули jQuery в вопросе. Итак, если вы используете jQuery, есть один способ сделать это :) – cnanney

+0

Если вы фактически конвертируете свой метод в javascript, он не работает. jQuery делает некоторую магию, чтобы заставить это работать, и, посмотрев на источник jQuery, я не мог полностью проверить, как он это делает. Вы не можете получить ширину css скрытого диапазона в javascript, я думаю, вам нужно получить его clientHeight. – sgarman