Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает скрипт под IE, помогите найти ошибку 
:(
    Опции темы
LuMee
Дата 15.5.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



Извечная сага о борьбе с тонкостями браузеров smile
В общем, суть: сооружаю небольшой скрипт, реализующий календарик с простейшими функциями выбора даты и листания по месяцам. Скрипт вполне успешно выполняется в Opera 9.10 и FireFox 1.5, т.е. календарь рисуется, а вот в IE 6.0 не работает вообще, т.е. ошибок не пишет, результата не выдает. Чувствую, что уже конкретно начинаю тупить, потому взываю к помощи сторонних наблюдателей со свежим взглядом: помогите найти ошибку в скрипте smile Скрипт прилагается
З.Ы. Скрипт находится в зачаточном состоянии, так что на код сильно не ругайтесь, там еще много чего надо приводить в порядок smile

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  JsCalendar.rar 1,86 Kb
PM MAIL   Вверх
SelenIT
Дата 16.5.2007, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



LuMee, в IE вот это скорее всего запинается:
Код

anchor.setAttribute('calendar', this);

Атрибут - это же строка, а нужно бы навесить свойство объекту...

Кстати, попытался я тут свой вариант календарика набросать... по-моему, много рутины (типа тех же високосных годов) вполне можно самому объекту Date доверить. Вот, может, пригодится...
Код

<script>
// день недели, начиная с понедельника
Date.prototype.getRuDay = function() { return (this.getDay() + 6)%7; }

function calendar(id, dt){
    var week = ['Пн','Вт','Ср','Чт','Пт','Сб','Вс'];
    var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
                  'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
    dt = dt || new Date();
    var y = dt.getFullYear(), m = dt.getMonth();
    // число дней в текущем месяце
    var days = (new Date(y,m+1,0)).getDate();
    // таблица
    var t = document.createElement('table');
    // шапка таблицы
    var tr = t.insertRow(-1);
    for(var i=0; i<7; i++) {
       var td = tr.insertCell(-1);
       td.innerHTML = week[i];
    }
    // тело таблицы
    for(var i = 1-(new Date(y,m,1)).getRuDay(); i<=days; i++) {
       if (tr.cells.length == 7) tr = t.insertRow(-1);
       td = tr.insertCell(-1);
       td.innerHTML = i>0 ? i : '';
    }
    while (tr.cells.length<7) tr.insertCell(-1);
    var c=document.getElementById(id), s;
    while(c.childNodes[0]) c.removeChild(c.childNodes[0]);
    c.innerHTML += months[m]+' '+y;
    c.appendChild(t);
    // "стрелки" вперед-назад
    for (var i=-1; i<=1; i+=2) {
        var dt1 = new Date(y,m+i,1);
     c.appendChild(s = document.createElement('span'));
     s.innerHTML = months[dt1.getMonth()]+' '+dt1.getFullYear();
        s.onclick = (function(d) { return function() { calendar(id, d) }})(dt1)
    }
}
</script>
<style>
/* немного "оформления" */
table { border-collapse: collapse; }
tr { font-weight: expression(this.previousSibling?'':'bold') } /* IE */
tr:first-child { font-weight: bold; } /* FF, Opera */
td { border: 1px solid #000; text-align: right; color: expression(this.nextSibling?'':'red') } /* IE */
td:last-child { color: red; } /* FF */
#container span { float: left; padding: 20px; cursor: pointer; }
</style>
<body onload="calendar('container')">
<div id="container"></div>
</body>



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
LuMee
Дата 16.5.2007, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



Наконец-то дорвался до нормально работающего IE (домашний, судя во всему, издыхает). Итак, ступор происходит на попытке засунуть что-либо в innerHTML таблицы. Разве так делать нельзя? Зачем тогда вообще innerHTML таблице?
PM MAIL   Вверх
SelenIT
Дата 16.5.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



По-моему, можно, если очень осторожно - чтобы tbody был на месте, все было корректно закрыто и т.д. Но ИМХО не стоит рисковать, с таблицей лучше работать спец. DOM-методами...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
LuMee
Дата 16.5.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



SelenIT, переделал, разобрался. Спасибо за пример кода, идея с использованием Date понравилась, сам как-то не додумался smile Буду теперь работать над прикручиванием красоты smile
PM MAIL   Вверх
phpWarm
Дата 2.7.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.4.2007

Репутация: нет
Всего: нет



тоже на днях делал календарик и тоже напоролся на проблему с innerHTML
самое интересное что при первом присваивании проблем не было, а при последующем переприсваивании содержимого IE выдает "Неизвестная ошибка времени выполнения"
под NN и Opera все отлично фурычит.
перерыл все книги и переделал через спец методы добавления-удаления узлов - пашет везде!!!
читал где-то, что innerHTML ввели впервые в IE, так-что забавно получается сами ввели - сами не поддерживаем работоспособность на должном уровне.
PM MAIL   Вверх
Zeroglif
Дата 2.7.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(phpWarm @  2.7.2007,  17:28 Найти цитируемый пост)
проблему с innerHTML


When using Dynamic HTML (DHTML) to create a document, you can create objects and set the innerText or innerHTML property of the object. However, because of the specific structure required by tables, the innerText and innerHTML properties of the table and tr objects are read-only.

http://msdn2.microsoft.com/en-us/library/ms532998.aspx

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1284 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.