Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: js не подтягивает css  (Прочитано 10607 раз)
0 Пользователей и 1 Гость смотрят эту тему.
lh2030
Гость
« : 08-04-2010 13:45 » 

хелп, скрипт стал некорректно запускаться (в оперы до версии 10.5 запускался, еще в ие8 запускается,  в мозиле проблема была)

Скрипт выкладывается на главной странице, суть его в том, чтобы вытянуть из файла два столбца(в одном столбце текст, в другом даты), сравнить дату во 2-ом столбце с текущей и: если прошедшая дата - то строка зачеркивается, если текущая - то подсвечиваться, если будущая - отображает без изменений

код ниже с примечанием:
set.txt (типа базы):
Код:
c1= new Array();c2= new Array();
last = 10 ;
c1[ 1 ] = ' Текст 1 ' ;
c1[ 2 ] = ' Текст 2 ' ;
c1[ 3 ] = ' Текст 3 ' ;
c1[ 4 ] = ' Текст 4 ' ;
c1[ 5 ] = ' Текст 5 ' ;
c1[ 6 ] = ' Текст 6 ' ;
c1[ 7 ] = ' Текст 7 ' ;
c1[ 8 ] = ' Текст 8 ' ;
c1[ 9 ] = ' Текст 9 ' ;
c1[ 10 ] = ' Текст 10 ' ;

c2[ 1 ] = ' 20.03.2010 ' ;
c2[ 2 ] = ' 21.03.2010 ' ;
c2[ 3 ] = ' 22.03.2010 ' ;
c2[ 4 ] = ' 23.03.2010 ' ;
c2[ 5 ] = ' 24.03.2010 ' ;
c2[ 6 ] = ' 25.03.2010 ' ;
c2[ 7 ] = ' 26.03.2010 ' ;
c2[ 8 ] = ' 27.03.2010 ' ;
c2[ 9 ] = ' 28.03.2010 ' ;
c2[ 10 ] = ' 29.03.2010 ' ;

и index.htm (обработчик):
1. берется строчка к примеру c2[ 1 ] = ' 20.03.2010 ' , раскладываться до вида 20032010 и сравнивается с текущей датой(которая тоже разложена до такого состояния).
2. затем оценивается статус(предыдущая дата, текущая дата, будущая дата) и с помощью css форматируется;
3. выводиться это в табличке td
Код:
<b> Инфо - время: <b>
<script language="JavaScript" src="set.txt"></script>
<style type="text/css">
.dataNo {
text-decoration: none;
}
.dataOk {
text-decoration: line-through;
}
.dataThis {
text-decoration: none;
color: #ff9115;
}
</style>
<script language="JavaScript">
function fileReadAnaliz(set) {

//  к 1.
 date = new Date();
 nums= new Array();
 num=1;
 for(count_num=1;count_num<=last;count_num++){
 nums[num]=count_num;
 if (date.getDate() < 10) {gDate = '0'+date.getDate()} else {gDate = date.getDate()} // if data elemet <9, then 0+data element
 gMonth=date.getMonth(); gMonth++; gMonth--; gMonth=gMonth+1; //gMonth - 0..9
 if (gMonth < 10) {gMonth = '0'+gMonth} else {gMonth = gMonth} 
 if (date.getYear() < 10 ) {gYear = '0'+date.getYear()} else {gYear = date.getYear()}
 function trim(str) {
  return str.replace(' ', '');
 }
 dtc = gYear+" "+gMonth+" "+gDate; dtc = trim(dtc); dtc = trim(dtc); dtc++; dtc--; //data current
 dtl = c2[count_num].split('.') // mas ["a", "b", "c"]
 dtl2=dtl[2]+''+dtl[1]+''+dtl[0]; dtl2 = trim(dtl2); dtl2 = trim(dtl2); dtl2++; dtl2--; //data lesson
 
// к 2.
 if (dtl2 < dtc) {
 document.write('<div class=dataOk>'+set[count_num]+'</div>'); //effect past date
 }
 else {
  if (dtl2 == dtc) {
document.write('<div class=dataThis>'+set[count_num]+'</div>'); //effect past date
}
  else {
  document.write('<div class=dataNo>'+set[count_num]+'</div>'); //effect no past date
}
 }
 }
}
</script>
<!--
// к 3.
-->
<table>
  <tbody>
    <tr>
      <td><script>fileReadAnaliz(c1)</script></td>
      <td><script>fileReadAnaliz(c2)</script></td>
    </tr>
  </tbody>
</table>
Записан
Золотая Лань
Молодой специалист

ru
Offline Offline
Пол: Женский

« Ответ #1 : 08-04-2010 15:23 » 

getYear()   Deprecated. Use the getFullYear() method instead

меняем в вашем скрипте date.getYear() на date.getFullYear() — и вот оно, счастье Ага
Записан
lh2030
Гость
« Ответ #2 : 08-04-2010 16:12 » new

Заработало  Улыбаюсь
Спасибо огромное

Вы отследили каким-то валидатором? Я так думаю, после строчки  "getYear()   Deprecated. Use the getFullYear() method instead".

Я просто думаю, как в дальнейшем избежать ошибок такого рода.
Сейчас вижу 1 способ: заглядывать на сайт http://www.w3schools.com
Быть может, есть валидаторы? Или это все мои фантазии?
 
« Последнее редактирование: 08-04-2010 16:29 от Sel » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 08-04-2010 16:25 » 

lh2030, валидатор для программного кода? Есть - мозг и документация.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lh2030
Гость
« Ответ #4 : 08-04-2010 16:29 » 

я так, на всякий случай, спросил.
Записан
Золотая Лань
Молодой специалист

ru
Offline Offline
Пол: Женский

« Ответ #5 : 08-04-2010 16:46 » 

> Вы отследили каким-то валидатором?

описываю способ, каким была найдена ошибка.
Но сразу предупреждаю: я совсем не программист, и для настоящих программистов такой способ наверняка будет выглядеть дико.

копирую себе эти два файла, правлю две последние даты на сегодняшнюю и дату в будущем (чтобы в случае успешного срабатывания увидеть результат), убеждаюсь, что проблема действительно есть. Причём случайно открываю в IE5 и вижу, что там всё работает.
В веб-испекторе safari смотрю и вижу, что у всех элементов один класс. Не дело. Смотрю, при каких условиях назначается именно этот класс. Вижу, сравниваются dtl2 и dtc. Вывожу эти значения alert'ом, чтобы проверить их на момент сравнения. И вот тут-то я вижу странную дату в dtc: 1100408.
Смотрю, как это значение формируется, попутно удивляюсь на такие конструкции, как «dtc++; dtc--;», предполагаю, что в gYear 110. Вывожу его алертом — так и есть. Далее смотрю, как формируется gYear. А формируется оно из date.getYear().
Ещё раз повторяю, что я не программист, и что такое getYear() не знаю. Потому спрашиваю у Великого-Мудреца-Который-Знает-Всё, и первым же результатом он мне даёт ссылку, процитированную в предыдущем ответе. Следую рекомендациям, меняю метод — всё работает.

Кстати, в связи с тем, что в обозримом будущем не предвидится года менее десятого (начало нового летоисчисления можно смело считать экстремальным форс-мажором, который могут сопровождать гибель нынешней и зарождение новых цивилизаций, и судьба маленького скромного скриптика скорее всего не будет волновать даже вас), можно строку  if (date.getFullYear() < 10 ) {gYear = '0'+date.getFullYear()} else {gYear = date.getFullYear()} считать избыточной и заменить на просто gYear = date.getFullYear().


> валидатор для программного кода?
в случае с компилируемыми языками это компилятор, в случае с интерпретируемыми — среда исполнения. В данном случае браузер.
В случае «невалидности» кода будет подробная ругань в консоли ошибок.
Но от логических ошибок никакой робот защитить не в состоянии Улыбаюсь

> как в дальнейшем избежать ошибок такого рода
да как… Очень просто.
Не работает — вперёд, за отладку Улыбаюсь
« Последнее редактирование: 08-04-2010 16:51 от Золотая Лань » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines