Javascript.RU

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

Динамическое добавление нового option в form
Прошу прощения, если тема пробегала.

Меня интересует механизм динамического добавления к уже имеющимся option в form.

Допустим, имею форму:
<form action="list.asp" name="archive">
<select name="Year" id="Year">
<option value="noValue" selected>Выберите год</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
</select>
<form>


Каким образом реализуется механизм автоматического добавления нового
<option value="2010">2010</option> по наступлению 2010 года?

Надеюсь понятно изъяснил
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2009, 12:05
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

при загрузке скрипта взять текущий год. проверить его на равность 2010. елси он равен - добавить чайлда селекту.

вы это хотели услышать?
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2009, 14:02
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Спасибо.
Скрипт вроде написал.
Но не могу сделать грамотную сортировку.
Необходима обратная последовательность.

Не поможите?

<html>
<head>
<script Language="JavaScript">
function checkYear() {
	var currDate = new Date()
	var currYear = currDate.getYear();

	var a = [];
	var i = 0;
	constYear = 2006;
	while(constYear <= currYear) {
		a[i] = constYear++;

	var listYear = new Option(a[i], a[i], false, false);
	var archive = document.archive.Year;
	archive.options[archive.options.length] = listYear;
	}
}
</script>
</head>
<body>
<form action="list.asp" name="archive">
	<select name="Year" id="Year" onchange="checkYear()">
		<option value="noValue" selected>Выберите год</option>
	</select>
<form>


</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2009, 15:44
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

во первых, var archive = document.getElementsByName('Year')[0];

а вообще. что-то под FF оно у меня вообще не запускается. то ли лыжи не едут, то ли... вставил alert('..') первой строчкой в скрипте - и фиг.

--edited
а, всё. стоило заменить onchange на onclick


--edited x2
чисто ради интереса. а что у вас возвращает это?
var currDate = new Date();
    var currYear = currDate.getYear();
    alert (currYear);

Последний раз редактировалось AzriMan, 22.04.2009 в 15:47.
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2009, 15:53
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

я бы это сделал так:
<html>
<head>
<script language="javascript" type="text/javascript">
function checkYear() {
    var archive = document.getElementsByName('Year')[0];
    if (archive.length == 1)     // вероятно нам не нужно заполнять повторно при клике.
    {
        var currDate = new Date();
        var currYear = currDate.getFullYear();
     
        constYear = 2006;
        //var a = [];
        //var i = 0;
        var i = currYear - constYear;

        while(constYear <= currYear) {
            var a = constYear++;
            var listYear = new Option(a, a, false, false);
            archive.options[i--] = listYear;
        }
    }
}
</script>
</head>

<body>
<form action="list.asp" name="archive">
    <select name="Year" onclick="checkYear();">
        <option value="noValue" selected>Выберите год</option>
    </select>
<form>
 
 
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2009, 16:04
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Цитата:
а, всё. стоило заменить onchange на onclick
Спасибо!

Т.е. в ФФ onchange вообще не работает?

onclick конечно хорошо, но при дефолтной загрузке страницы в выборке отображается «Выберите месяц», а уже когда щелкаем на выборке происходит резайс элемента и по-умолчанию предлагается 2008 с 2009 и т.д.
Мне честно говоря так не нравится.

Есть какой-то выход из положения?

Цитата:
во первых, var archive = document.getElementsByName('Year')[0]
Это обязательно прописывать?
Спрашиваю, потому что интересно.

Цитата:
чисто ради интереса. а что у вас возвращает это?
2009

Последний раз редактировалось artwalek, 22.04.2009 в 16:07.
Ответить с цитированием
  #7 (permalink)  
Старый 22.04.2009, 16:38
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

в фф onchange работает.
что в вашем понятии означает onchange? когда он должен срабатывать?
Цитата:
но при дефолтной загрузке страницы в выборке отображается «Выберите месяц», а уже когда щелкаем на выборке происходит резайс элемента и по-умолчанию предлагается 2008 с 2009 и т.д.
ну вообще по идее так и происходит. а как ВАМ нравится? имхо ВАШ код это и делает.

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

по поводу 2009. стоит тестировать свои скрипты/страницы более чем в одном браузере. желательно кроме ие проверять в ff и opera. и вы поймете что многое написанное может не выполняться. ибо нужно изначально писать кроссбраузерно. т.е. код, который поймут разные браузеры и адекватно его отработают.
Ответить с цитированием
  #8 (permalink)  
Старый 23.04.2009, 07:56
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Цитата:
ну вообще по идее так и происходит. а как ВАМ нравится? имхо ВАШ код это и делает.
Мне кажется неправильным, когда кликаешь на выбрать месяц сбивается выбора, загружается 2008 и приходится по-новой выбирать годы.
Не подскажите, как этого избежать?

Цитата:
прописывать обязательно, т.к. не все браузеры поймут что такое document.archive.Year. и не понятно зачем городить велосипед и обращаться к форму а потом к потомку если можно обратиться к потомку напрямую.
Спасибо.
Учту.
Но частично код брал из книги Флэнагана «JavaScript». 5-е издание.

Цитата:
стоит тестировать свои скрипты/страницы более чем в одном браузере. желательно кроме ие проверять в ff и opera. и вы поймете что многое написанное может не выполняться. ибо нужно изначально писать кроссбраузерно. т.е. код, который поймут разные браузеры и адекватно его отработают.
Да, конечно.
Обязательно проверяю.
Меня это и смутило.
Тем более код был приведен в вышеуказанной книге.
Ответить с цитированием
  #9 (permalink)  
Старый 23.04.2009, 07:59
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

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

Сообщение от artwalek Посмотреть сообщение
onchange, в моем понимании это загрузка скрипта, без использовании кнопки.
onchange -> on change -> срабатывает при изменении элемента
onclick -> on click -> срабатывает при клике по элементу


Сообщение от artwalek Посмотреть сообщение
Мне кажется неправильным, когда кликаешь на выбрать месяц сбивается выбора, загружается 2008 и приходится по-новой выбирать годы.
Не подскажите, как этого избежать?
именно что бы избежать это я вставил проверку в код
// вероятно нам не нужно заполнять повторно при клике.
if (archive.length == 1)
которая смотрит, если у нас кол-во элементов ==1 (надпись выберите год) то она заходит во внутрь и заполняет его годами. при повторном клике никакое заполнение не происходит. вообще, правильнее будет сравнивать не по длине а по
archive.selected == "noValue"
или по наличию "noValue" среди потомков archive. способов масса.



Сообщение от artwalek Посмотреть сообщение
Но частично код брал из книги Флэнагана «JavaScript». 5-е издание.
Тем более код был приведен в вышеуказанной книге.
зачастую книги набирают специальные люди. и они могут допускать опечатки, особенно в коде. да и не всегда код написанный в книгах бывает верный. точнее - не в каждой книге. может быть автор не знает про другие браузеры? я не знаком с творчеством Флэнагана, равно как и не читал ни одной книжки по JS. скажу более - я кроме Петзольда (программирование под Windows) и Шильдта не читал вообще ничего по программированию.
Ответить с цитированием
Ответ



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

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