Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   !doctype влияет на работу яваскрипт?! (https://javascript.ru/forum/misc/1817-doctype-vliyaet-na-rabotu-yavaskript.html)

Sha 21.09.2008 02:12

!doctype влияет на работу яваскрипт?!
 
В заголовке скорее не вопрос, а восклицание...

Проблема вот в чем. Делал сайт, не обратил внимание что !doctype стоит неправильный, без ссылки на спецификацию. К тому времени, как пришла пора выкладывать сайт в сеть увидел, что в типе документа нет ссылки на спецификацию.

Меняю
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


на вот это
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">


всё, ничего не работает...

Разница только в типе документа, даже не столько в разнице, сколько отсутствием у первого оного. IE говорит, мол "недопустимый аргумент" вот в этой строке:

TruckDiv.style.left = StartX;


вот эти два файла:

Мужики, прошу помощи! Почему не работает?

Sha 21.09.2008 03:21

И еще вопрос: Почему нельзя получить значение свойства, если оно задано не через style="...", а во внешнем css файле?
У меня почему-то не получалось...может я что-то не так делаю...

Андрей Параничев 21.09.2008 14:20

Sha,
Попробуйте
TruckDiv.style.left = StartX + "px";

Если я не ошибаюсь, для strict это принципиально.

Цитата:

Сообщение от Sha
Почему нельзя получить значение свойства, если оно задано не через style="...", а во внешнем css файле?

Потому что в element.style находятся либо стили заданные явно в аттрибуте, либо установленные через JavaScript ранее (в этот же объект style). Для получения "настоящего" стиля элемента нужно использовать другие конструкции. Почитайте про currentStyle и getComputedStyle.

Sha 21.09.2008 21:37

Спасибо, Андрюх, большое!

Экспериментально выяснил, что в IE наличие единиц не принципиально, а в FF принципиально.

Потом, оказалось, что ошибка вылезала из-за того, что я не правильно брал размеры браузера:

var MainWidth = document.body.clientWidth;         // Ширина экрана


В строгом режиме они почему-то не считывались... и после вычислений, естественно, выдавалось NuN Нашел в сети скриптик
if (self.innerHeight) {	
				MainWidth = self.innerWidth;	
				MainHeight = self.innerHeight;	
			} else if (document.documentElement && document.documentElement.clientHeight) {	
				MainWidth = document.documentElement.clientWidth;	
				MainHeight = document.documentElement.clientHeight;	
			} else if (document.body) {	
				MainWidth = document.body.clientWidth;	
				MainHeight = document.body.clientHeight;	
			}


вот после этого заработало всё как надо в строгом режиме)

Новая страница
Старая страница

Вот и валидный код


Часовой пояс GMT +3, время: 01:28.