Косяк в скрипте?

Читающий
На сайте с 23.04.2009
Offline
60
370

Приветствую.

Почему второй алерт возвращает undefined?

<!DOCTYPE HTML>

<html>
<head> </head>
<body>
<form id="form_id">
<textarea id="text"></textarea>
</form>
<script>
var var_1 = "text";
var var_2 = document.getElementById( 'form_id' );

var b = eval("var_2." + var_1);
alert(b)
</script>



<div id="div_id">
<textarea id="text_2"></textarea>
</div>
<script>
var var_1 = "text_2";
var var_2 = document.getElementById( 'div_id' );

var b = eval("var_2." + var_1);

alert(b)
</script>

</body>
</html>

http://learn.javascript.ru/play/AIELPb

Лучший доход для файлового трафика: Без бана АВ (http://goo.gl/F4Lem). А так же здесь (goo.gl/HzCxo) и здесь (goo.gl/B5BDC) Закроем продуктовые магазины за не уникальное содержание ©
Sveta Prokopeva
На сайте с 10.05.2006
Offline
99
#1

В первом случае var_2 это HTMLFormElement во втором HTMLDivElement. Эти объекты характеризуются различным набором свойств и методов. Разницу вы можете посмотреть при помощи:


for (var i in var_2)
{
console.log(i + ' : ');
console.log(var_2);
}

Поле <textarea> является дочерним для тега <form>, поэтому в DOM он доступен, а во втором нет. Обратите внимание на var_2.elements в первом случае. Там вы и найдёте все поля формы.

Читающий
На сайте с 23.04.2009
Offline
60
#2

Спасибо за весьма исчерпывающий ответ.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий