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

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

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


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