Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 18.11.2010, 23:35
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

есть такая штука как диалоговые окна. А еще если много функциональности на одной страничке, стоит ее на несколько разбить
Ответить с цитированием
  #22 (permalink)  
Старый 19.11.2010, 00:03
Интересующийся
Отправить личное сообщение для vinet Посмотреть профиль Найти все сообщения от vinet
 
Регистрация: 07.01.2010
Сообщений: 13

Спасибо
Ответить с цитированием
  #23 (permalink)  
Старый 15.01.2011, 22:40
Аватар для Freakmeister
Аспирант
Отправить личное сообщение для Freakmeister Посмотреть профиль Найти все сообщения от Freakmeister
 
Регистрация: 15.01.2011
Сообщений: 61

Народ, подскажите плз как исправить такой косяк... Делаю органайзер для сайта, на странице добавления нового события есть форма из трёх раскрывающихся списков - day, month и year:



Понятно, что в каждом месяце определённое количество дней и я делал, чтобы при смене месяца, просчитывалось количество дней в этом месяце и менялось содержимое списка day. Вот скрипт полностью (сильно не пинайте, я новичёк в 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>


При смене месяца вызывается функция countday(). Всё отлично работает во всех браузерах кроме IE - в day получается пустой список. Я стал досконально перебирать код и выяснил, что innerHTML в IE вообще не работает, по крайней мере на селектак. Даже если для простоты вместо всего вышеизложенного написать так:
function countday() {
var day = document.getElementById('day');
day.innerHTML = '<option>test</option>';
}

IE всё-равно возвращает в day пустой список, а другие браузеры возвращают test. Подскажите плз как исправить ситуацию. =\

Последний раз редактировалось Freakmeister, 15.01.2011 в 22:42.
Ответить с цитированием
  #24 (permalink)  
Старый 15.01.2011, 22:50
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Даж вдумываться не хочу, есть же объект Date()

Дней в месяце m годa y:
var y=2011,m=2;
alert(new Date(y,m,0).getDate())


Как это работает:
Объект Date принимает значение месяца от 0 до 11, т.о. мы задаём нужным_нам+1, при этом ставя день месяца в 0 мы заставляем его принимать значение: последний день месяца, предыдущего заданнному.

Последний раз редактировалось Aetae, 16.01.2011 в 01:57.
Ответить с цитированием
  #25 (permalink)  
Старый 15.01.2011, 22:55
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Freakmeister, для кроссбраузерности необходимо использовать метод add(). Вот, посмотрите пример.
function foo() {
	var optn;
	var sel = document.getElementById("month");
	for (var i = 0; i < 5; i++) {
		optn = document.createElement("option");
		optn.text = i;
		optn.value = i;
		try { sel.add(optn, null); } catch(e) { sel.add(optn); }
	}
}


<form action="#">
	<input type="button" value="add options" onclick="foo();" />
	<select id="month"></select>
</form>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение innerHTML в цикле %) Tror Общие вопросы Javascript 24 03.05.2012 06:36
двойной innerHTML Лесной_Белк Элементы интерфейса 13 21.05.2009 02:25
JS to innerHTML helgi AJAX и COMET 4 07.12.2008 20:50
innerHTML HelpeR Events/DOM/Window 14 25.10.2008 14:14
ошибка с innerHTML Gekt0r Общие вопросы Javascript 15 21.08.2008 11:57