Динамическое добавление нового 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 года? Надеюсь понятно изъяснил :yes: |
при загрузке скрипта взять текущий год. проверить его на равность 2010. елси он равен - добавить чайлда селекту.
вы это хотели услышать? |
Спасибо.
Скрипт вроде написал. Но не могу сделать грамотную сортировку. Необходима обратная последовательность. Не поможите?
<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>
|
во первых, var archive = document.getElementsByName('Year')[0];
а вообще. что-то под FF оно у меня вообще не запускается. то ли лыжи не едут, то ли... вставил alert('..') первой строчкой в скрипте - и фиг. --edited а, всё. стоило заменить onchange на onclick --edited x2 чисто ради интереса. а что у вас возвращает это?
var currDate = new Date();
var currYear = currDate.getYear();
alert (currYear);
|
я бы это сделал так:
<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>
|
Цитата:
Т.е. в ФФ onchange вообще не работает? onclick конечно хорошо, но при дефолтной загрузке страницы в выборке отображается «Выберите месяц», а уже когда щелкаем на выборке происходит резайс элемента и по-умолчанию предлагается 2008 с 2009 и т.д. Мне честно говоря так не нравится. Есть какой-то выход из положения? Цитата:
Спрашиваю, потому что интересно. Цитата:
|
в фф onchange работает.
что в вашем понятии означает onchange? когда он должен срабатывать? Цитата:
прописывать обязательно, т.к. не все браузеры поймут что такое document.archive.Year. и не понятно зачем городить велосипед и обращаться к форму а потом к потомку если можно обратиться к потомку напрямую. по поводу 2009. стоит тестировать свои скрипты/страницы более чем в одном браузере. желательно кроме ие проверять в ff и opera. и вы поймете что многое написанное может не выполняться. ибо нужно изначально писать кроссбраузерно. т.е. код, который поймут разные браузеры и адекватно его отработают. |
Цитата:
Не подскажите, как этого избежать? Цитата:
Учту. Но частично код брал из книги Флэнагана «JavaScript». 5-е издание. Цитата:
Обязательно проверяю. Меня это и смутило. Тем более код был приведен в вышеуказанной книге. |
Цитата:
|
Цитата:
onclick -> on click -> срабатывает при клике по элементу Цитата:
// вероятно нам не нужно заполнять повторно при клике. if (archive.length == 1)которая смотрит, если у нас кол-во элементов ==1 (надпись выберите год) то она заходит во внутрь и заполняет его годами. при повторном клике никакое заполнение не происходит. вообще, правильнее будет сравнивать не по длине а по archive.selected == "noValue"или по наличию "noValue" среди потомков archive. способов масса. Цитата:
|
| Часовой пояс GMT +3, время: 10:12. |