23.04.2009, 12:16
|
Аспирант
|
|
Регистрация: 11.12.2008
Сообщений: 44
|
|
Цитата:
|
именно что бы избежать это я вставил проверку в код
|
Ага. Теперь понятно.
Не поймите меня неправильно, но ни в IE, ни в FF2 у меня не работает
Все равно происходит повторное заполнение при клике, но теперь уже по годам.
У вас работает?
Цитата:
|
может быть автор не знает про другие браузеры?
|
Честно говоря, эту книгу хвалили.
Поэтому решил по ней изучать JavaScript.
Теперь буду внимательнее к коду в этой книге.
Цитата:
|
равно как и не читал ни одной книжки по JS
|
Зато у вас ловко все получается.
И скрипт в вашем исполнении красив
|
|
23.04.2009, 12:34
|
Профессор
|
|
Регистрация: 27.02.2009
Сообщений: 215
|
|
Сообщение от artwalek
|
Не поймите меня неправильно, но ни в IE, ни в FF2 у меня не работает
Все равно происходит повторное заполнение при клике, но теперь уже по годам.
|
так. стоп. что именно не работает в ie и ff2? мой код или пример из книги?
|
|
23.04.2009, 13:12
|
Аспирант
|
|
Регистрация: 11.12.2008
Сообщений: 44
|
|
Сообщение от AzriMan
|
так. стоп. что именно не работает в ie и ff2? мой код или пример из книги?
|
Ваш код работает.
Только работает он так (у меня, в ИЕ7 и ФФ2).
При загрузке страницы в выборке установлено «Выберите год».
Кликаем.
Происходит ресайз формы до ширины 2008. Т.е. происходит повторное заполнение формы, только теперь годами.
Т.е. чтобы выбрать год, нужно щелкнуть 2 раза.
Вот это меня и смущает.
|
|
23.04.2009, 14:58
|
Профессор
|
|
Регистрация: 27.02.2009
Сообщений: 215
|
|
если мне не изменяет память, то до момента клика в селекте находится только "Выберите год". в момент клика срабатывает событие onclick() и выполняется JS код, который заполняет селект годами. ибо если бы там было что-то кроме "Выберите год", то не сработало бы условие где .length==1 и код бы не выполнился.
|
|
23.04.2009, 15:27
|
Аспирант
|
|
Регистрация: 11.12.2008
Сообщений: 44
|
|
Сообщение от AzriMan
|
если мне не изменяет память, то до момента клика в селекте находится только "Выберите год". в момент клика срабатывает событие onclick() и выполняется JS код, который заполняет селект годами. ибо если бы там было что-то кроме "Выберите год", то не сработало бы условие где .length==1 и код бы не выполнился.
|
Да, именно так.
Извините, если вас замучал.
В таком случае думаю нужно прописать в body onload="checkYear();"
Но теперь другая засада, при загрузке по-умолчанию в селекте становится 2008, а хочется текущий.
Не подскажите, как исправить?
|
|
23.04.2009, 17:03
|
Профессор
|
|
Регистрация: 27.02.2009
Сообщений: 215
|
|
Сообщение от artwalek
|
Да, именно так.
|
по-моему, это немного противоречит этому:
Сообщение от artwalek
|
Только работает он так (у меня, в ИЕ7 и ФФ2).
При загрузке страницы в выборке установлено «Выберите год».
Кликаем.
Происходит ресайз формы до ширины 2008. Т.е. происходит повторное заполнение формы, только теперь годами.
Т.е. чтобы выбрать год, нужно щелкнуть 2 раза.
|
по-моему достаточно кликнуть один раз по селекту. или о каком заполнении в первый раз идет речь?
Сообщение от artwalek
|
В таком случае думаю нужно прописать в body onload="checkYear();"
|
если вам нужно, что бы в момент клика селект УЖЕ был заполнен - тогда да. такой вариант будет наиболее оптимальным. но, насколько я понял, изначально речь не шла о том, что бы он был заполнен автоматически. поэтому и код был соответствующий.
Сообщение от artwalek
|
Но теперь другая засада, при загрузке по-умолчанию в селекте становится 2008, а хочется текущий.
Не подскажите, как исправить?
|
function checkYear() {
var yearsList = document.getElementsByName('Year')[0];
if (yearsList.value == "noValue")
{ // вероятно, нам не нужно заполнять повторно при клике.
var currDate = new Date();
var currYear = currDate.getFullYear();
constYear = 2006;
var i = currYear - constYear;
while(constYear <= currYear) {
var a = constYear++;
var listYear = new Option(a, a, false, false);
yearsList.options[i--] = listYear;
}
}
yearsList.selectedIndex=0;
}
|
|
23.04.2009, 21:04
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Самая лучшая книга по JS?
по поводу document.form_name.el_name -> document.getElementById('el_name') - в общем-то оно вроде везде работает, но может лучше и не пользоваться такой штукой, не знаю
artwalek, такие вещи лучше на сервере делать, а не на клиенте
я бы сделал так:
function addYears() {
var year = document.form1.year;
var currDate = new Date();
var currYear = currDate.getFullYear();
for( var i=currYear; i >= 2006; i-- ) {
var opt = new Option(i, i);
year.options[ year.options.length ] = opt;
}
year.selectedIndex = 1;
}
p.s. constYear получилась глобальной переменной
|
|
24.04.2009, 07:15
|
Аспирант
|
|
Регистрация: 11.12.2008
Сообщений: 44
|
|
AzriMan
Спасибо вам.
Вы мне помогли!
x-yuri
document.form_name.el_name
Мы с AzriMan выяснили, что в ФФ2 не работает.
Поэтому наверное лучше не пользоваться.
И этот метод описан в книге Флэнагана.
Цитата:
|
artwalek, такие вещи лучше на сервере делать, а не на клиенте
|
Расскажите пожалуйста, почему?
|
|
24.04.2009, 09:27
|
Профессор
|
|
Регистрация: 27.02.2009
Сообщений: 215
|
|
Сообщение от artwalek
|
document.form_name.el_name
Мы с AzriMan выяснили, что в ФФ2 не работает.
|
утверждать не буду, нет второго фф что бы проверить )
|
|
24.04.2009, 17:42
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body onload="alert(document.form1.asd1.value);">
<form name="form1" action="index.php">
<div><input type="hidden" name="asd1" value="4"></div>
</form>
</body>
</html>
вот такой код в ff2 (2.0.0.20) работает
есть другой нюанс, в xhtml 1.0 strict у элемента form нету атрибута name
p.s. но, как я говорил, я не знаю как лучше поступать
Цитата:
|
Расскажите пожалуйста, почему?
|
1) это можно сделать на сервере (т.е. не будет использоваться javascript), 2) думаю, эта страничка может быть помещена в кэш сервера (хотя сам не сталкивался с кэшированием на сервере)
p.s. я сказал лучше, в твоем случае вряд ли это имеет значение
|
|
|
|