Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает getElementsByName (https://javascript.ru/forum/misc/12798-ne-rabotaet-getelementsbyname.html)

JLe 03.11.2010 16:19

Не работает getElementsByName
 
Изучаю JavaScript. Прочла статью "Поиск элементов в DOM" и решила проверить на практике.
Допустим надо подсчитать всех потомков элемента FORM

var ms = document.getElementsByName('formname')[0].getElementsByTagName('*');
alert(ms.length);


в IE выдает 20, а в FF - 0. Подскажите пожалуйста, может я чего-то не так поняла.

Kolyaj 03.11.2010 16:23

HTML покажите.

JLe 03.11.2010 16:58

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  <meta http-equiv="Pragma" content="no-cache"/>
  <script type="text/javascript" src="/scripts.js"></script>
  <script type="text/javascript" src="/jquery-1.3.1.js"></script>
  <title>титул</title>
</head>
<body>
  <table>
  <tr><td>
    <FORM name="filterform">
      <SELECT size="1" name="grpshow" id="grpshow" onChange="lFilterChange();">
       <OPTION value="1" selected>текст1</OPTION>
       <OPTION value="2">текст2</OPTION>
       <OPTION value="3">текст3</OPTION>
       <OPTION value="4">текст4</OPTION>
       <OPTION value="5">текст5</OPTION>
       <OPTION value="6">текст6</OPTION>
       <OPTION value="7">текст7</OPTION>
       <OPTION value="8">текст8</OPTION>
       <OPTION value="9">текст9</OPTION>
       <OPTION value="10">текст10</OPTION>
       <OPTION value="11">текст11</OPTION>
      </SELECT>
    </FORM>
  </td></tr></table>
</body>
</html>


scripts.js:
function lFilterChange() 
{
  var ms = document.getElementsByName('filterform')[0].getElementsByTagName('*');
  alert(ms.length);
}

Kolyaj 03.11.2010 17:01

Всё вместе желательно, чтобы ошибку воспроизвести.

JLe 03.11.2010 17:21

подправила

Kolyaj 03.11.2010 17:26

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  <meta http-equiv="Pragma" content="no-cache"/>
  <script type="text/javascript">
function lFilterChange()
{
  var ms = document.getElementsByName('filterform')[0].getElementsByTagName('*');
  alert(ms.length);
}
  </script>
  <title>титул</title>
</head>
<body>
  <table>
  <tr><td>
    <FORM name="filterform">
      <SELECT size="1" name="grpshow" id="grpshow" onChange="lFilterChange();">
       <OPTION value="1" selected>текст1</OPTION>
       <OPTION value="2">текст2</OPTION>
       <OPTION value="3">текст3</OPTION>
       <OPTION value="4">текст4</OPTION>
       <OPTION value="5">текст5</OPTION>
       <OPTION value="6">текст6</OPTION>
       <OPTION value="7">текст7</OPTION>
       <OPTION value="8">текст8</OPTION>
       <OPTION value="9">текст9</OPTION>
       <OPTION value="10">текст10</OPTION>
       <OPTION value="11">текст11</OPTION>
      </SELECT>
    </FORM>
  </td></tr></table>
</body>
</html>

Всё работает.

JLe 03.11.2010 17:47

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

JLe 04.11.2010 11:31

Нашла ошибку. Так работает:
<table><tr><td><FORM></FORM></td></tr></table>

а так нет:
<table><tr><FORM><td></td></FORM></tr></table>

2de 04.11.2010 11:45

Ничего себе ошибка, это не ошибка а непойми что, нельзя так делать. Нужно либо таблицу вставлять в форму либо форму вставлять в ячейку.

JLe 04.11.2010 12:03

Та я догадываюсь, что неправильно делаю, но что делать если надо :)
В общем смысл какой - форма "растянута" на строку в таблице. Таблица длинная. В ячейках находятся элементы этой формы. Все очень красивенько выглядит (с точки зрения пользователя) и некоторых браузерах работает. Результат - строки в таблице можно редактировать не отходя от кассы.
Если у вас есть лучшие идеи по этому поводу, с удовольствием выслушаю.

Можно наверное вообще убрать форму, но при этом оставить ее элементы... подумаю еще в общем

JLe 08.11.2010 14:48

А так можно писать?
var ms = document.getElementsByName(form_name)[0].getElementsByName(elem_name);


А как сюда добавить кнопку "Посмотреть!"?

Kolyaj 08.11.2010 14:52

Цитата:

Сообщение от JLe
А так можно писать?

Что мешает попробовать?

Цитата:

Сообщение от JLe
А как сюда добавить кнопку "Посмотреть!"?

http://javascript.ru/formatting

JLe 08.11.2010 14:59

Да я уже попробовала, но опять не работает :)
Либо так писать нельзя, либо у меня опять где-то ошибки запартизанились.
Спасибо за ссылку, там столько всего интересного!
Firebug говорит, что второй getElementsByName is not a function

monolithed 08.11.2010 15:03

<form name="forma">
    <input type="text" />
</form>
<script type="text/javascript">
alert(document.getElementsByName('forma')[0].elements[0].tagName.toLowerCase());
</script>

JLe 08.11.2010 15:37

monolithed,
этот пример и у меня работает. А мой - нет.
Видимо придется перебором найти нужный элемент :(
Мне не сложно (тем более, что не я буду перебирать), но это выглядит неправильным.


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