Выпадающее меню Select
37 сообщений
#14 лет назад
Здравствуйте! Подскажите пожалуйста, как один из пунктов селект меню скрыть в списке, т.е. имеется вот такое меню:<select>
<option selected="selected">выберите город</option>
<option>Москва</option>
<option>Лондон</option>
<option>Рига</option>
</select>
Нужно чтобы до того как пользователь открыл меню была надпись "выберите город", а когда откроется только города. Сейчас оно дублируется, выходит два раза "выберите город", сверху и в списке.
Подскажите пожалуйста как сделать такое. Заранее большое спасибо!
3195 сообщений
#14 лет назад
В таком виде дубляжа не будет. Приводите полный код, скорее всего разработчики сделали так, чтобы первый пункт добавлялся автоматически, а в вашем списке городов нужно удалить пункт выбора.
584 сообщения
#14 лет назад
<select onmousedown="if(this.options.value=='0') this.options = null;" style="width:200px;">
<option value="0" selected="selected">Хочешь зарплату?</option>
<option value="1">Нет, не хочу</option>
<option value="2">Нет, спасибо</option>
</select>

3195 сообщений
#14 лет назад
Грязный хак. 
Тогда так:
<select onmousedown="if(this.options.value=='0' || this.options.value=='1') this.options = null;" style="width:200px;">
<option value="0" selected="selected">Хочешь зарплату?</option>
<option value="1">Нет, не хочу</option>
<option value="2">Нет, спасибо</option>
</select>
Кстати код, что выше (да и мой тоже) убирает 0-ль элемент не при маусдаун, а сразу же (в IE).
584 сообщения
#14 лет назад
Цитата ("AlekartRu"):убирает 0-ль элемент не при маусдаун, а сразу же (в IE).
У меня в 8-ом все норм

Оффтопик
не надо лишать юзера права выбора, вдруг он не захочет говорить "спасибо"
this.options.value=='1'
не надо лишать юзера права выбора, вдруг он не захочет говорить "спасибо"

3195 сообщений
#14 лет назад
Цитата ("SField"):Есть такая фишка, что броузер запоминает позицию выбранного элемента списка и при обновлении выбирает его автоматом. М.б. этот случай?
Нет, при загрузке страницы только два элемента в селекте, IE не ниже восьмого, второй раз запускать его, чтобы версию посмотреть не буду.

Цитата ("SField"):
не надо лишать юзера права выбора, вдруг он не захочет говорить "спасибо"
Ну да. Я прочитал на автомате первый пункт, как "Да, дайте две", а там тоже "Нет, не хочу". Пора спать))
37 сообщений
#14 лет назад
Спасибо большое друзья! Очень помогаете.Но у меня не получилось. Я использую плагин CuSel (ссылка). Добавляю код, что Вы указали выше, но все равно без изменений, дублируется строка, даже если выбрать любой из пунктов, то он и вверху и в списке. Подскажите пожалуйста в чем может быть проблема. Заранее спасибо!
1599 сообщений
#14 лет назад
Цитата ("AlekartRu"):В таком виде дубляжа не будет.
Ну как же не будет-то? Посмотрите тут ссылка где бюджет - если открыть селект, то опция "не определен" есть и в списке и в текущем состоянии - т.е. два раза.
TaifovAziz, вероятно надо на onclick уничтожать первую опцию с value=0. Только не забыть ее обратно прилеплять потом.. хм.. что-то все равно чушь какая-то) лучше оставьте как есть, это стандартно и никому никогда не мешало)
3195 сообщений
#14 лет назад
Цитата ("Crist"):если открыть селект, то опция "не определен" есть и в списке и в текущем состоянии - т.е. два раза.
Чувствую себя идиотом)) Могли бы вы скриншот сделать? У меня один раз.
11416 сообщений
#14 лет назад

102 сообщения
#14 лет назад
А disabled не пойдет?
2989 сообщений
#14 лет назад
Есть один более менее приемлемый способ. Поверх тестовой части селекта накладывается неактивный <input type="text"> с нужным текстом. А дальше пишем обработку на javascript. Если селект пустой и список закрыт показываем инпут, иначе скрываем. При таком подходе не нужно указывать в селекте значение по умолчанию типа "выберите город", оно указывается в инпуте.
584 сообщения
#14 лет назад
Цитата ("TaifovAziz"):Я использую плагин CuSel (ссылка...). Добавляю код, что Вы указали выше, но все равно без изменений, дублируется строка, даже если выбрать любой из пунктов, то он и вверху и в списке. Подскажите пожалуйста в чем может быть проблема.
Cusel перегружает select (в смысле, что берет из него данные, а потом их уже самостоятельно обрабатывает), соответственно тот код что выше не подойдет.
Нужно в объявлении cusel, добавить такой же грязный хак

var h=false;
jQuery("#cuselFrame-country").click(function(){
if(!h) {jQuery("#cuselFrame-country .cuselActive").hide(); h=true;}
});
Этот код в стандартном примере, в первом селекте: ссылка
Оригинал тут: ссылка
37 сообщений
#14 лет назад
SField, Спасибо Вам большое. Все работает отлично!Всем остальным тоже огромное спасибо, очень помогли.