Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.04.2009, 12:16
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Цитата:
именно что бы избежать это я вставил проверку в код
Ага. Теперь понятно.

Не поймите меня неправильно, но ни в IE, ни в FF2 у меня не работает

Все равно происходит повторное заполнение при клике, но теперь уже по годам.

У вас работает?

Цитата:
может быть автор не знает про другие браузеры?
Честно говоря, эту книгу хвалили.
Поэтому решил по ней изучать JavaScript.
Теперь буду внимательнее к коду в этой книге.

Цитата:
равно как и не читал ни одной книжки по JS
Зато у вас ловко все получается.
И скрипт в вашем исполнении красив
Ответить с цитированием
  #12 (permalink)  
Старый 23.04.2009, 12:34
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

Сообщение от artwalek Посмотреть сообщение
Не поймите меня неправильно, но ни в IE, ни в FF2 у меня не работает

Все равно происходит повторное заполнение при клике, но теперь уже по годам.
так. стоп. что именно не работает в ie и ff2? мой код или пример из книги?
Ответить с цитированием
  #13 (permalink)  
Старый 23.04.2009, 13:12
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Сообщение от AzriMan Посмотреть сообщение
так. стоп. что именно не работает в ie и ff2? мой код или пример из книги?
Ваш код работает.

Только работает он так (у меня, в ИЕ7 и ФФ2).
При загрузке страницы в выборке установлено «Выберите год».
Кликаем.
Происходит ресайз формы до ширины 2008. Т.е. происходит повторное заполнение формы, только теперь годами.
Т.е. чтобы выбрать год, нужно щелкнуть 2 раза.

Вот это меня и смущает.
Ответить с цитированием
  #14 (permalink)  
Старый 23.04.2009, 14:58
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

если мне не изменяет память, то до момента клика в селекте находится только "Выберите год". в момент клика срабатывает событие onclick() и выполняется JS код, который заполняет селект годами. ибо если бы там было что-то кроме "Выберите год", то не сработало бы условие где .length==1 и код бы не выполнился.
Ответить с цитированием
  #15 (permalink)  
Старый 23.04.2009, 15:27
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Сообщение от AzriMan Посмотреть сообщение
если мне не изменяет память, то до момента клика в селекте находится только "Выберите год". в момент клика срабатывает событие onclick() и выполняется JS код, который заполняет селект годами. ибо если бы там было что-то кроме "Выберите год", то не сработало бы условие где .length==1 и код бы не выполнился.
Да, именно так.
Извините, если вас замучал.

В таком случае думаю нужно прописать в body onload="checkYear();"

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

Не подскажите, как исправить?
Ответить с цитированием
  #16 (permalink)  
Старый 23.04.2009, 17:03
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 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;
}
Ответить с цитированием
  #17 (permalink)  
Старый 23.04.2009, 21:04
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 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 получилась глобальной переменной
Ответить с цитированием
  #18 (permalink)  
Старый 24.04.2009, 07:15
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

AzriMan
Спасибо вам.
Вы мне помогли!

x-yuri
document.form_name.el_name
Мы с AzriMan выяснили, что в ФФ2 не работает.
Поэтому наверное лучше не пользоваться.
И этот метод описан в книге Флэнагана.

Цитата:
artwalek, такие вещи лучше на сервере делать, а не на клиенте
Расскажите пожалуйста, почему?
Ответить с цитированием
  #19 (permalink)  
Старый 24.04.2009, 09:27
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

Сообщение от artwalek Посмотреть сообщение
document.form_name.el_name
Мы с AzriMan выяснили, что в ФФ2 не работает.
утверждать не буду, нет второго фф что бы проверить )
Ответить с цитированием
  #20 (permalink)  
Старый 24.04.2009, 17:42
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 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. я сказал лучше, в твоем случае вряд ли это имеет значение
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск