Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает Javascript при заданном doctype (https://javascript.ru/forum/misc/37543-ne-rabotaet-javascript-pri-zadannom-doctype.html)

sasha-ua 23.04.2013 22:41

Не работает Javascript при заданном doctype
 
Здравствуйте.

Скрипт:
function resizeRock() {
  document.getElementById("rockImg").style.height = (document.body.clientHeight - 100) * 0.9;
}

HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>iRock - The Virtual Pet Rock</title>
   <script type="text/javascript" src="js/script.js"></script>
</head>
  <body onload="resizeRock();">
    <div style="margin-top:100px; text-align:center">
      <img id="rockImg" src="images/rock.png" alt="iRock" style="cursor:pointer" />
    </div>
  </body>
</html>

Если убрать doctype, скрипт работает.. Но почему так происходит, и что с этим делать? ведь нельзя же верстать без doctyp'a..

ruslan_mart 24.04.2013 05:10

Может как-нибудь так?
function resizeRock() {
  document.getElementById("rockImg").style.height = (document.documentElement.clientHeight - 100) * 0.9;
}


А вообще, если Вы хотите высоту картинки рястянуть на всю высоту окна браузера, то лучше это сделать через CSS:
#rockImg {position:absolute; height-min:100%;}

sasha-ua 24.04.2013 09:56

Как сделать это css я понимаю, но сейчас учу javascript по этой супер-книге (http://www.ozon.ru/context/detail/id/7301823/) и на первых примерах уже столкнулся с фатальной проблемой.
Мало того что код не работает с doctype, так еще за то время что ее переводили успел устареть метод onresize..

И в принципе в голове не укладывается как doctype влияет на javascript?

dmitriymar 24.04.2013 10:25

Цитата:

Сообщение от sasha-ua
Как сделать это css я понимаю, но сейчас учу javascript по этой супер-книге (http://www.ozon.ru/context/detail/id/7301823/) и на первых примерах уже столкнулся с фатальной проблемой.
Мало того что код не работает с doctype, так еще за то время что ее переводили успел устареть метод onresize..

И в принципе в голове не укладывается как doctype влияет на javascript?

устареть? :) без доктайпа браузер в каком режиме работает? мож правильнее -"ещё не родился" ?:)

Цитата:

Сообщение от sasha-ua
document.getElementById("rockImg").style.height = (document.body.clientHeight - 100) * 0.9;

а единицы измерения указывать не нужно ? не? ну и соответственно приводить к числовому типам, строки?

sasha-ua 24.04.2013 18:54

Спасибо за подсказку. Добавил единицы измерения и все заработало включая onresize:
function resizeRock() {
  document.getElementById("rockImg").style.height = (document.documentElement.clientHeight - 100) * 0.9 +"px";
}

Приводить к числовому типу не пришлось.
Прочитал что без doctype работает quirk mode.. Получается в старых браузерах единицы измерения по умолчанию были в пикселях?

webmaker 22.07.2013 11:28

Та же фигня, даже если я добавляю "px"
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="Valval" />

<title>IRock - виртуальный любимец Rock</title>
<script type="text/javascript" src="cookie.js"></script>
<script type="text/javascript">
var userName;

function resizeRock() {
document.getElementById("rockImg").style.height = (document.body.clientHeight - 100) * 0.9 + "px";
}
function greetUser() {
if(navigator.cookieEnabled)
userName = readCookie("irock_username");
if (userName) alert("Hello, " + userName + "I meesed you.");
else alert('Hello, I am your pet rock.');
}

function touchRock () {

if(userName){
alert ("Спасибо за внимание, " + userName + ".");
}
else {
userName = prompt("Как вас зовут?", "Введите ваше имя.");
if (userName) {
alert ("Рад Вас видеть, " + userName + ".");
if(navigator.cookieEnabled)
writeCookie("irock_username", userName, 5*365);
else alert("Сорри, но ваш браузер не поддерживает куки.(((")
}
}
document.getElementById("rockImg").src = "rock_happy.png";
setTimeout("document.getElementById('rockImg').src = 'rock.png';", 5 * 60 * 1000);
}
</script>

</head>

<body onload="resizeRock(); greetUser();" onresize="resizeRock();">

<div style="margin-top: 100px; text-align: center;">
<img id="rockImg" src="rock.png" alt="IRock" style="cursor: pointer;" onclick="touchRock();" />
</div>

</body>
</html>

webmaker 22.07.2013 12:00

Цитата:

Сообщение от Ruslan_xDD (Сообщение 247830)
Может как-нибудь так?
function resizeRock() {
  document.getElementById("rockImg").style.height = (document.documentElement.clientHeight - 100) * 0.9;
}


Спасибо, именно это и помогло


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