В форме есть два <SELECT> - день и месяц. Соответссна, в каждом месяце разное кол-во дней и мне надо сделать, чтобы при изменении в форме SELECT месяца, менялось содержимое SELECT с днями. Как это запилить?
А аналоги есть? jquery у меня вешает ajax на сайте из-за кривого движка. Под этот движок пока пишу на коленке, так что тупо перезагрузка страницы - тоже сгодится.
Хз, при подключении jquery аякс перестаёт аяксить. =\ Разбираться с этим лень есичесна, т.к. всё-равно сейчас пишу портал с нуля.
Зачем тебе Ajax или JQ для этого? Я бы смотрел в сторону Date(); Грубо говоря при клике на месяц расчитываешь кол-во дней, потом заполняешь SELECT этими днями, к примеру через innerHTML... ну как то так. И будет работать быстрее чем с Ajax, теоритически =)
Если аякс перестает аяксить, значит с вероятностью 98% у тебя возникает ошибка js, еще один процент на конфликт Jquery и предыдущей библиотеки которую ты используешь для аякса и еще один на чудо господне. Есичесна писать портал (!) с нуля не зная как делать динамический селект это круто. И да, для конкретно этой задачи тебе аякс не нужен. Примерно так: HTML: <select id='month' onchange='selectMonth(this.value)'> (options) </select> <select id='days' > (options) </select> [js]function selectMonth(month){ dt = new Date(); year=("текущий год: "+dt.getFullYear()); var dayCount = new Date(year, month + 1, 0).getDate(); sel = document.getElementById('days'); sel.options.length = 0; for (i=; i<=dayCount; i++){ sel.options = new Option("i", "i"); } }[/js]
Короче накатал вот так... Стал тестить, оказалось не работает в IE. Где косяк? =\ [js]<script type='text/javascript'> function isLeapYear(year) { // узнаём високосный ли год if (year % 4 == 0) return true return false } function getDays(month, year) { //узнаём сколько дней в месяце var ar = new Array(12) ar[1] = 31 // Январь ar[2] = (isLeapYear(year)) ? 29 : 28 // Февраль ar[3] = 31 // Март ar[4] = 30 // Апрель ar[5] = 31 // Май ar[6] = 30 // Июнь ar[7] = 31 // Июль ar[8] = 31 // Август ar[9] = 30 // Сентябрь ar[10] = 31 // Октябрь ar[11] = 30 // Ноябрь ar[12] = 31 // Декабрь return ar[month] } function gethtml(numb, selected) { //получаем вёрстку инпута var b; var i; var r; var s; for (i=1; i<=numb; i++){ r=''+i if (r.length<2) { //добавляем 0 вначало, если число однозначное r='0'+r; } s='' if (i==selected) { //выставляем день, который был выставлен вначале s=' selected' } b = b+\"<option value='\"+r+\"'\"+s+\">\"+r+\"</option>\" } return b } function countday() { //главная функция, которая запускает все остальные var day = document.getElementById('day'); var s=day.value; var month = document.getElementById('month'); var year = document.getElementById('year'); var a = getDays(month.value, year.value); day.innerHTML = ''; day.innerHTML = gethtml(a, s); } </script>[/js] HTML: <select name='month' id='month' onChange='countday()'> <option value='1'>Январь</option> <option value='2'>Февраль</option> <option value='3'>Март</option> <option value='4'>Апрель</option> <option value='5'>Май</option> <option value='6'>Июнь</option> <option value='7'>Июль</option> <option value='8'>Август</option> <option value='9'>Сентябрь</option> <option value='10'>Октябрь</option> <option value='11'>Ноябрь</option> <option value='12'>Декабрь</option> </select>
Перебрал все функции выше и пришёл к выводу, что они все исправны, а innerHTML вообще не работает в IE на селектах. Я прав? Если начальную функцию countday() для простоты переписать двумя строчками: [js]var day = document.getElementById('day'); day.innerHTML = '<option>test</option>';[/js] то в опере и фаерфоксе получится список из одного элемента - test, а в IE выходит просто пустой список.