Динамическое добавление нового 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, время: 09:22. |