Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как раскрыть <select> <option> (https://javascript.ru/forum/dom-window/6664-kak-raskryt-select-option.html)

A_V 12.12.2009 23:50

Как раскрыть <select> <option>
 
Какое событие раскрывает <select>?

Gozar 13.12.2009 11:17

http://www.hscripts.com/tutorials/ja...ect-events.php

A_V 13.12.2009 14:26

Спасибо за ссылку, но я так и не понял. Как javascript-ом развернуть select? Это вообще можно сделать?

Gozar 14.12.2009 13:55

Вот здесь обсуждается подобная тема, возможно она поможет Вам разобраться:http://javascript.ru/forum/events/33...a-onclick.html

jurjik 14.12.2009 15:33

блин помогите решить задачу)))

e1f 14.12.2009 15:44

http://tinyurl.com/ydflsnd

Gozar 14.12.2009 18:24

Вот еще одна подобная тема:http://javascript.ru/forum/events/65...ta-select.html

чтобы навсегда разобраться с этим вопросом я приведу ниже код (работает ie,ff):
<html>
<head></head>
<body onload="document.getElementById('someID').size = 3">
<select id="someID" name="name">
	<option value="value1">option1</option>
	<option value="value2">option2</option>
	<option value="value3">option3</option>
</select>
</body>
</html>

а далее еще более извращенный, но похоже интересующий многих(работает в ff и требует небольших пояснений):
<html>
<head>
<script type="text/javascript">
function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    1, 0, 0, 0, 0, false, false, false, false, 0, null);
  var cb = document.getElementById("someID"); 
  var canceled = !cb.dispatchEvent(evt);
}
</script>
<title></title>
</head>
<body onload="setTimeout('simulateClick()', 2000);">
<select id="someID" name="name" onclick="this.size=3">
	<option value="v1">option1</option>
	<option value="v2">option2</option>
	<option value="v3">option3</option>
</select>
</body>
</html>

после загрузки по таймауту выполняется функция simulateClick() - ф-я взята почти без изменений с MDC, которая симулирует клик мышкой по <select id="someID", на котором в свою очередь стоит изменение this.size по onclick. Вы можете убрать onclick="this.size=3" из select и посмотреть что произойдет!

Но самое главное, оба кода совершенно бесполезны т.к. неизвестно иx применение, как уже неоднократно говорилось на этом форуме, что подтверждают приведенные мной ссылки. К тому же первый код намного проще, но на практике также бесполезен.

За правильность и точность того, что происходит в вышеописанном коде я не ручаюсь, но это не меняет сути.

Gvozd 15.12.2009 01:26

[offtopic]
эта запись должна отсылать к другой записи;)
[/offtopic]

Gozar 15.12.2009 09:28

http://javascript.ru/forum/events/65...ta-select.html

A_V 15.12.2009 10:37

Спасибо за примеры. Однако size=3 и щелчок мыши по select приводят к разным результатам. Неужели нельзя развернуть select как при щелчке? Я не могу в это поверить :(

Gozar 15.12.2009 11:29

A_V,
Ответьте мне на вопрос: зачем Вам это нужно?
дурацкие ответы:
1. чтобы было
2. типо круто
3. я создаю мультфильм в браузере
не принимаются.
Я хочу, чтобы Вы четко сформулировали зачем Вам это нужно.

Цитата:

Сообщение от A_V (Сообщение 37975)
Я не могу в это поверить

это Ваши личные проблемы, на этом форуме они не решаются.

ps: скучно

A_V 16.12.2009 12:24

Мне это не нужно. Мне интересно можно или нельзя это сделать. А Вам не интересно? Я ни где не нашел ответа что этого сделать нельзя. Зато полно ответов "зачем вам это нужно?".

Gozar 16.12.2009 21:15

onclick="this.size=3" //это
onclick="alert('The Truth is Out There')" //меняете на это


исходя из этого:
https://developer.mozilla.org/en/DOM/select
https://developer.mozilla.org/en/DOM/element
http://www.w3.org/TR/DOM-Level-2-HTM...ml#ID-94282980
http://www.w3.org/TR/1999/REC-html40...ml#edef-SELECT

а еще вот здесь: http://www.w3.org/TR/1999/REC-html40...l#adef-onclick
написано вот это:
Цитата:

onclick = script [CT]
The onclick event occurs when the pointing device button is clicked over an element. This attribute may be used with most elements.
вот это:
<html>
<head>
<script type="text/javascript">
function simulateClick() {
var e = document.getElementById('someID');
	e.focus(); //здесь все работает, а
	e.click();  //вот здесь вызывает ошибку
}
</script>
<title></title>
</head>
<body onload="setTimeout('simulateClick()', 2000);">
<select id="someID" name="name">
	<option value="v1">option1</option>
	<option value="v2">option2</option>
	<option value="v3">option3</option>
</select>
</body>
</html>


Цитата:

click() Simulates a click on the current element.
Реализовывать или нет то или иное поведение дело конкретной компании и браузера и насколько я понимаю, Ваш вопрос волнует только людей, которые не понимают или не читали то, что написано вот здесь ECMAScript в краткая история. Так как то, что Вас интересует никому, кроме Вас не интересно и реализация бессмысленной по сути вещи бессмысленна, всё это вышесказанное ведет к неизбежному вопросу: зачем Вам это нужно?, на что собственно Вы отвечаете 'мне интересно', а моя реализация меня приравнивает Ваш ответ к дурацкому ответу 1. чтобы было

x-yuri 21.12.2009 16:20

Цитата:

Сообщение от A_V
Зато полно ответов "зачем вам это нужно?"

потому что людей обычно интересуют практические вопросы. А тема топика наталкивает на мысли, что ты хочешь что-то сделать криво, а потом это может кому-нибудь боком вылезти ;)

А.Б. 22.12.2009 03:49

Господа, почему вы вдруг однозначно решили, что это никому не нужно? Посмотрите на поведение поисковиков (Google, Yandex): они автоматически разворачивают аналоги тэга <select>, заполненные в зависимости от вводимых первых букв запроса. Задача очень схожа. Однако, раз даже Google прибег к применению собственной динамической панели взамен использования стандартного <select>, то это наводит на мысли...

B~Vladi 22.12.2009 10:04

Цитата:

Сообщение от А.Б.
Посмотрите на поведение поисковиков (Google, Yandex): они автоматически разворачивают аналоги тэга <select>, заполненные в зависимости от вводимых первых букв запроса.

Они не разворачивают список. Это динамически созданный див.

А.Б. 22.12.2009 10:09

Цитата:

Сообщение от B~Vladi (Сообщение 38764)
Они не разворачивают список. Это динамически созданный див.

Я использовал определение "аналоги тэга <select>", чем подчеркивал, что это не <select>. Но речь-то идет о том, может ли для практических целей понадобиться автоматическое раскрытие списка. Да, может. Техническая реализация -- <div> или <select> -- вопрос в данном случае вторичный.

Gozar 22.12.2009 10:22

Цитата:

Сообщение от А.Б. (Сообщение 38757)
разворачивают аналоги тэга <select>

Почему Вы сравниваете select и input, а не
<input type="text"> и <input type="text" autocomplete="off">
?

А.Б. 22.12.2009 10:34

Я не сравниваю <select> и <input>. Я всего лишь скромно обращаю внимание, что для определенных задач может понадобиться интерфейс, каким угодно образом реализующий автоматически открывающийся список. Ведь я изначально ввязался в эту дискуссию потому, что было заявлено:

Цитата:

реализация бессмысленной по сути вещи бессмысленна
Мы с вами, очевидно, подходим к проблеме с разных сторон. Вам важно, зачем раскрывать конкретно <select>. И определение "бессмысленная вещь" вы, вероятно, используете только в отношении <select>, а не в отношении пользовательского функционала. Мне же важно, нужно ли автоматическое раскрытие списка в принципе, т.е. именно пользовательский функционал. Отсюда и непонимание.

Kolyaj 22.12.2009 10:50

А.Б.,
вы сравниваете контролы, у которых есть два важных отличия: в один можно вводить текст, в другой -- нельзя, у одного можно вручную список открыть, у другого -- нельзя. Фактически, вы сравниваете два контрола, у которых только одна общая деталь: что-то выпадает снизу. Вам не кажется странным такое сравнение?

x-yuri 22.12.2009 11:51

Цитата:

Сообщение от А.Б.
Посмотрите на поведение поисковиков (Google, Yandex): они автоматически разворачивают аналоги тэга <select>, заполненные в зависимости от вводимых первых букв запроса.

если бы ты сказал это с самого начала, это бы сэкономило страницу разговоров

А.Б. 22.12.2009 14:23

Цитата:

Сообщение от Kolyaj (Сообщение 38771)
А.Б.,
Вам не кажется странным такое сравнение?

С программистской точки зрения, это "две большие разницы". С пользовательской -- ничуть. Но мы-то, труженики программисты, трудимся для кого? Для него, для чайника. Поэтому и смотреть на функциональность должны в первую очередь его глазами.

Да, формально я не прав, объединяя в рассуждении <div> и <select>, однако это может помочь автору темы: забей на <select> и делай <div>, как названные Google и Yandex. В общем-то, я другими словами повторяю свое первое сообщение в теме.

Kolyaj 22.12.2009 14:38

Цитата:

Сообщение от А.Б.
С программистской точки зрения, это "две большие разницы". С пользовательской -- ничуть.

Т.е. два контрола с абсолютно разным поведением по вашему идентичны с пользовательской точки зрения? И причем здесь пользователь, если мы говорим о странном желании разработчика программно раскрыть select?

micscr 22.12.2009 19:57

Вот накинулись на ТС, а ведь он дело спрашивает. Например если программировать интерфейс с учетом, что у пользователя нет мыши и ему приходится обходить элементы ввода только клавиатурой. Такое программное раскрытие списка было бы неплохо:) . Хотя можно исхитриться - временно size списка увеличить на фокус, а потом уменьшить. Но все равно эффект не тот.

P.S. Просто надо понимать, что многие возможности интерфейса , которые в других средах программирования - детская забава в стандартном web интерфейсе - далекая мечта. И самый полезный предмет после книги по JS - это губозакатательная машинка.:)

Kolyaj 22.12.2009 20:27

Цитата:

Сообщение от micscr
у пользователя нет мыши и ему приходится обходить элементы ввода только клавиатурой

Если у пользователя нет мыши, то он знает, что списки открываются по Alt+Стрелка вниз.

Цитата:

Сообщение от micscr
что многие возможности интерфейса , которые в других средах программирования - детская забава в стандартном web интерфейсе - далекая мечта.

Скорее наоборот.

Gozar 22.12.2009 20:31

Цитата:

Сообщение от micscr (Сообщение 38834)
Вот накинулись на ТС, а ведь он дело спрашивает.

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

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

PeaceCoder 22.12.2009 22:40

Цитата:

Сообщение от B~Vladi
Они не разворачивают список. Это динамически созданный див.

с overflow: auto

А по теме: приведенная цитата и реализация выпадающих списков таким образом нааамного гибче в представлении того же дерева с картинками там и т.п. авто подгрузка ветки дерева и т.п. а выглядит как и select

micscr 23.12.2009 09:25

Цитата:

Сообщение от Kolyaj (Сообщение 38838)
Скорее наоборот.

Хе, хе.
Очень легко в JS спрограммировать поле ввода по какой-нибудь необычной маске или используя AJAX банальный grid отображения и ввода данных в базу? Кода и времени уйдет не мало, если вообще получится. И так почти со всем. В основном думаешь не что сделать, а как это сделать.

x-yuri 23.12.2009 11:40

интересно, а что бы сказал человек, начинавший с web-программирования, перейдя на создание десктопных приложений :-?

Kolyaj 23.12.2009 11:54

micscr,
html+css предоставляют такую гибкость в создании интерфейсов, которая десктопным программам и не снилась.

micscr 23.12.2009 12:31

Цитата:

Сообщение от Kolyaj (Сообщение 38921)
micscr,
html+css предоставляют такую гибкость в создании интерфейсов, которая десктопным программам и не снилась.

Ну хотя бы примерчик приведите и ссылочку посмотреть, что там такое существует а мужики то и не знают:blink: .

Kolyaj 23.12.2009 13:01

micscr,
возьмём Delphi, к примеру. Не устраивает тебя стандартная TabPanel, хочется другой вид табиков. За какое время ты напишешь новый компонент с табиками, бриджем и поэтессами?

micscr 23.12.2009 14:28

Цитата:

Сообщение от Kolyaj (Сообщение 38932)
micscr,
возьмём Delphi, к примеру. Не устраивает тебя стандартная TabPanel, хочется другой вид табиков. За какое время ты напишешь новый компонент с табиками, бриджем и поэтессами?

Я на Delphi давно не писал, время не скажу, но большой проблемы не вижу. Главное, что в принципе это не проблема.
А в JS факт тот, что многие вещи просто в принципе не заложены. Достаточно посмотреть на большинство сайтов - чуть что по серьезнее, по красивее - уже Flash. На JS просто люди не рискуют браться - знают все проблемы.

Kolyaj 23.12.2009 14:32

Цитата:

Сообщение от micscr
А в JS факт тот, что многие вещи просто в принципе не заложены.

Например?

micscr 23.12.2009 14:41

Ну самое простое - когда я ввожу в инпут данные мне нужно знать на какой позиции сейчас находится курсор. Как получить информацию например в keypress?

micscr 01.06.2010 17:40

так я торможу :blink:
По какой клавише в браузерах обнулить выбор в списке, т.е. selectedIndex = -1 сделать ?

Simon 11.03.2011 21:23

ну как, прошло достаточно времени, может что появилось, можно к примеру навести мышку на список и он автоматически раскрылся, такое возможно? может есть плагин jquery?

розовый слоник 14.03.2011 20:33

Simon
Смысл темы отсутствует. Лично я не вижу смысла от селекта что бы он сам открывался. Вообще вы можете обосновать где это понадобится?
У пользователя нету мышки? Где тут проблема? Нормальные люди для этого придумали фокус. Нужно при наведении раскрыть меню зачем лезть не понятно куда если это просто HTML+CSS. Только ради того что бы сказать "Я охуенен".
Когда вы создаете скрипты вы, наоборот думаете о том, как бы сделать так, что бы он меньше весил или я тут такой один?

Simon 15.03.2011 17:30

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

В качестве примера есть такая страничка
http://irr.ru/addAdvert/step2/?category=cars/repayment/
тут имеется выбор страны, региона, города..
но тут список не раскрывается к сожалению, если бы бы раскрывался, было оч.удобно.

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


И это не для того что бы сказать "Я охуенен", а просто время не стоит на месте, пользователи требуют удобства.

x-yuri 15.03.2011 18:09

Цитата:

Сообщение от Simon
но тут список не раскрывается к сожалению, если бы бы раскрывался, было оч.удобно.

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

p.s. http://2010.404fest.ru/video/item-23/


Часовой пояс GMT +3, время: 01:26.