IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Объясните странность в работе JavaScript (http://www.imho.ws/showthread.php?t=144669)

BorLase 19.10.2010 12:52

Объясните странность в работе JavaScript
 
Наткнулся сегодня на такое вот загадочное поведение кода:
Код:

<script type="text/javascript" language="JavaScript">
    function requestUserName(inp, outp, state) {
            state.innerText = "123 " + inp.value;
            outp.innerText = "QWE "  + inp.value;
    }
</script>

<body>
    <form>
        <input type="text" id="user_id"/>&nbsp;<input type="button" onclick="requestUserName(user_id, user_name, state);" value="Go"/>
        <hr/>
        <code>
        <div id="user_name"/>
        </code>
        <hr/>
        <code>
        <div id="state"/>
        </code>
        <hr/>
    </form>
</body>

Этот код отрабатывает только один раз, да и то криво (теряет один div) - потом валится с ошибкой.

Но, если заменить деларацию div на
Код:

<div id="user_name"></div>
...
<div id="state"></div>

все работает замечательно.

Вопрос, собственно - почему? Разве короткая форма тэга не равна полной пустой? Всю жизнь был уверен, что запись
Код:

<div id="user_name"></div>
полностью эквивалентна
Код:

<div id="user_name"/>
Может кто-то просветить на этот счет?

RaZEr 19.10.2010 13:22

"потом валится с ошибкой" - текст ошибки секретный?

BorLase 19.10.2010 13:38

да я специально привел полный код (благо, он короткий), чтоб можно было посмотреть вживую :)

при первом нажатии отображается только outp блок, но других ошибок не выдает

при втором - пишет 'state' is undefined

добавлено через 1 минуту
браузер - IE 6, забыл указать

RaZEr 19.10.2010 14:36

У старого ослика (да и у нового) есть известная проблема с односложными тегами, например он скрипты не загружает если объявлены как <script src="" />

В остальном, к элементам нужно обращаться через document.getElementById, а вместо innerText использовать innerHTML.

BorLase 19.10.2010 15:06

Цитата:

Сообщение от RaZEr (Сообщение 1726178)
У старого ослика (да и у нового) есть известная проблема с односложными тегами, например он скрипты не загружает если объявлены как <script src="" />

учту, не знал
даже нигде не наталкивался на упоминание о такой особенности
Цитата:

В остальном, к элементам нужно обращаться через document.getElementById, а вместо innerText использовать innerHTML.
это я в курсе; просто корпоративный стандарт - именно IE, поэтому можно не заморачиваться кросс-браузерностью

Hubbitus 20.10.2010 20:08

А какой DOCTYPE документа? На сколько я понимаю вариант без закрывающего тега правильно работает гарантированно только в xhtml, о чем кстати валидатор W3C честно сыпет варнингами, на сколько я помню.


Часовой пояс GMT +4, время: 12:15.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.