Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Создать select с сотней опций


Автор: noNick 11.3.2008, 04:06
нужно вывести года в селекти в виде "1900" ,  в селекте нужно что б отображалось года с 1900 по 2000 год, с помощью оператора for .поможете ? 

Автор: bars80080 11.3.2008, 10:24
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml " lang="en" xml:lang="en">
<head>
  <title>dinamic select</title>
  <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
  <meta http-equiv="Content-Language" content="ru-ru" />
<style type="text/css">
* { margin: 0; padding: 0; }
#main { position: relative; left: 100px; top: 100px; }
</style>
<script type="text/javascript"><!--
function recity() {
    var sselect = document.forms[0].god;
    for(i = 1900; i < 2001; i++) { sselect.options[i - 1900] = new Option(i, i); }}
//-->
</script>
</head>
<body onload="recity()"><div id="main">
<form>
<select name="god"><option></option></select>
</form>
</div>
</body></html>

Автор: smartov 11.3.2008, 13:21
bars80080, форматирование кода неудобное и обращение к элементу не по DOM стандарту, хотя и все верно.

noNick, 
ИМХО лучше так

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml " lang="en" xml:lang="en">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
</head>
<body>

<select name="year" id="year_select"></select>

<script type="text/javascript">

function clearSelect(select) {
    select.options.length = 0;
}

function fillSelect(select, startYear, endYear) {
    if (select == null) return;

    clearSelect(select);
    for (var i = startYear; i <=endYear; i++) {
        select.options[select.options.length] = new Option(i, i);
    }
}

window.onload = function() {
    fillSelect(document.getElementById('year_select'), 1900, 2000);
}

</script>

</body>
</html>

Автор: bars80080 11.3.2008, 13:36
так быренько выдрал и перековал из другого примера, у меня к примеру не возникает задачи отстраивать такие селекты, их проще на сервере производить, а динамические, так обсуждались в других темах

Автор: ksnk 11.3.2008, 13:47
Цитата(bars80080 @  11.3.2008,  13:36 Найти цитируемый пост)
их проще на сервере производить,

Проще для кого? Придется переслать дополнительные <option>xxxx</option> - 21 символ * 100 - 2100 байт... (по минимуму smile)

Автор: bars80080 11.3.2008, 13:58
ну, "проще" - расшифровывается, как проще (меньше думаешь)

в принципе всегда оценивал реализации с позиции будут ли работать, а если js отключён... так что проще...

Автор: vasac 11.3.2008, 14:11
noNick, вы не любите своих посетителей.

Автор: smartov 11.3.2008, 15:49
bars80080, 
Цитата(bars80080 @  11.3.2008,  12:36 Найти цитируемый пост)
их проще на сервере производить

Согласен, но мало ли какие задачи у человека. Я, например, делал подобное для контрола с выбором даты.

ksnk, 
Цитата(ksnk @  11.3.2008,  12:47 Найти цитируемый пост)
Проще для кого? Придется переслать дополнительные <option>xxxx</option> - 21 символ * 100 - 2100 байт... 

Шаблонизаторы придуманы давным давно. В Smarty подобное делается тремя строчками, а переслать надо будет два числа.
Так что если бы мне задача позволяла я бы однозначно делал с помощью Smarty.

Автор: noNick 13.3.2008, 02:14
спасибо ребята , большое спасибо . 

Цитата(vasac @  11.3.2008,  14:11 Найти цитируемый пост)
noNick, вы не любите своих посетителей. 

нет  , почему же ? люблю , просто у меня доступ к инету плохой . 

Автор: bars80080 13.3.2008, 10:44
кстати, тов. smartov,
Цитата
bars80080, обращение к элементу не по стандарту

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

Автор: ksnk 13.3.2008, 11:44
smartov, Я вот и говорю, смотря для кого. Страничка тяжелеет на 2++ кила... всего за 3 строчки ;). К тому-же select с сотней позиций - нечеловеколюбиво, imho... я бы оставил там input, который подменял скриптом на чего-то более адекватное, на datepicker, какой или на тот-же select, на самый крайний случай...

Автор: smartov 13.3.2008, 12:20
bars80080, 
Цитата(bars80080 @  13.3.2008,  09:44 Найти цитируемый пост)
а как по стандарту

Привет. Говоря строго я немного приврал, каюсь, сейчас подправлю пост smile
Ты сделал ПО стандарту, НО тот стандарт, который ты использовал очень стремный и может вести к ошибкам, часто имел (имеет?) проблемы в поддержке разными браузерами и требует обязательного наличия формы.

Хорошим стилем считается использование DOM
getElementById 
getElementsByTagName 

То есть сказав "не по стандарту" я имел в виду "не по стандарту DOM"

Автор: bars80080 13.3.2008, 12:34
стрёмный стандарт - звучит отлично
согласен с формой неудобно, когда пример касается всего лишь поля
однако, это следствие того что в каком-то случае у меня как раз что-то не заработало (именно через id), а вот при таком обращении (тоже согласен использовать document.name_form.name_element фигово), тем не менее работает

с другой стороны, вот есть у меня три книжки по js, нигде не упоминается "как лучше" (оно и понятно, год прошёл, и все стандарты изменились), однако коллекция forms присутствует везде

я уже поднимал тему, надеялся что накидают отличных ссылок по стандартам (вроде как php.net и т.п.), но облом
лучшей оказалась ссылка от Сардара: http://www.w3schools.com/jsref/jsref_obj_global.asp , но пока в аглицком переберёшь всё...
(там ведь не найдёшь "как лучше")

вот вопрос: 
все ли свойства и методы присущи document.name_form.name_element, будут работать и при document.getElementById('id_element')
?

Автор: ksnk 13.3.2008, 12:34
smartov, 
А какая конкретно строчка из этих 2-х сделана "не по стандарту"?
Код

  var sselect = document.forms[0].god;
    for(i = 1900; i < 2001; i++) { sselect.options[i - 1900] = new Option(i, i); }}

Правильно ли я понимаю, что обязать программиста отказаться от name'ов в форме и заставлять их в обязательном порядке придумывать уникальный id элементам (getElementById), или вообще отсчитывать 5, к примеру, input от начала формы (getElementsByTagName) - это хороший стиль использования DOM'а?  smile 

Автор: smartov 13.3.2008, 14:13
Цитата(ksnk @  13.3.2008,  11:34 Найти цитируемый пост)
document.forms[0]


Добавлено через 28 секунд
Цитата(ksnk @  13.3.2008,  11:34 Найти цитируемый пост)
что обязать программиста отказаться от name'ов в форме и заставлять их в обязательном порядке придумывать уникальный id элементам (getElementById)

Да

Добавлено через 1 минуту и 18 секунд
Цитата(bars80080 @  13.3.2008,  11:34 Найти цитируемый пост)
стрёмный стандарт - звучит отлично

Есть немного  smile

Добавлено через 4 минуты и 13 секунд
Цитата(bars80080 @  13.3.2008,  11:34 Найти цитируемый пост)
с другой стороны, вот есть у меня три книжки по js, нигде не упоминается "как лучше" (оно и понятно, год прошёл, и все стандарты изменились), однако коллекция forms присутствует везде

Рассказываю почему - все книжки для js писались под IE. Изначально в них даже forms не было. document.all и понеслася.
А вот document.form_name уже точно не по стандарту. Если коллекция forms[] еще является w3c-шной, то такая конструкция - нет.
http://www.w3schools.com/htmldom/dom_obj_document.asp

Цитата(bars80080 @  13.3.2008,  11:34 Найти цитируемый пост)
все ли свойства и методы присущи document.name_form.name_element, будут работать и при document.getElementById('id_element')

Обе эти конструкции просто возвращают ссылку на элемент.

Добавлено через 6 минут и 48 секунд
Цитата(ksnk @  13.3.2008,  11:34 Найти цитируемый пост)
обязать программиста отказаться от name'ов в форме и заставлять их в обязательном порядке придумывать уникальный id элементам

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

Автор: Sardar 13.3.2008, 15:39
Цитата(smartov @  13.3.2008,  13:13 Найти цитируемый пост)
А вот document.form_name уже точно не по стандарту.

Это эхо старого нетскейпа, в нём по моему даже CSS1 стили не в .style лежали, а сразу свойствами объекта.

Обращение к форме (ссылкам, картинками т.д.) по индексу (кроме как перебор всех) - это прямая дорога в счастливый дебаг и преждевременную старость smile   Любой баннер, любой счётчик, любая "фишка", что когда нибудь могут добавить на страницу (гугловый поиск к примеру в шапку), всё что угодно, что может добавить новую форму - и всё, скрипт твой не рабочий.

Автор: smartov 13.3.2008, 15:57
Sardar, 
Цитата(Sardar @  13.3.2008,  14:39 Найти цитируемый пост)
  Любой баннер, любой счётчик, любая "фишка", что когда нибудь могут добавить на страницу (гугловый поиск к примеру в шапку), всё что угодно, что может добавить новую форму - и всё, скрипт твой не рабочий. 

Спасибо. Именно это я и называл "стремный стандарт"  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)