Не работает getElementsByName
Изучаю JavaScript. Прочла статью "Поиск элементов в DOM" и решила проверить на практике.
Допустим надо подсчитать всех потомков элемента FORM
var ms = document.getElementsByName('formname')[0].getElementsByTagName('*');
alert(ms.length);
в IE выдает 20, а в FF - 0. Подскажите пожалуйста, может я чего-то не так поняла. |
HTML покажите.
|
<!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);
}
|
Всё вместе желательно, чтобы ошибку воспроизвести.
|
подправила
|
<!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>
Всё работает. |
спасибо, значит у меня где-то в другом месте ошибка, буду искать
|
Нашла ошибку. Так работает:
<table><tr><td><FORM></FORM></td></tr></table> а так нет: <table><tr><FORM><td></td></FORM></tr></table> |
Ничего себе ошибка, это не ошибка а непойми что, нельзя так делать. Нужно либо таблицу вставлять в форму либо форму вставлять в ячейку.
|
Та я догадываюсь, что неправильно делаю, но что делать если надо :)
В общем смысл какой - форма "растянута" на строку в таблице. Таблица длинная. В ячейках находятся элементы этой формы. Все очень красивенько выглядит (с точки зрения пользователя) и некоторых браузерах работает. Результат - строки в таблице можно редактировать не отходя от кассы. Если у вас есть лучшие идеи по этому поводу, с удовольствием выслушаю. Можно наверное вообще убрать форму, но при этом оставить ее элементы... подумаю еще в общем |
А так можно писать?
var ms = document.getElementsByName(form_name)[0].getElementsByName(elem_name); А как сюда добавить кнопку "Посмотреть!"? |
Цитата:
Цитата:
|
Да я уже попробовала, но опять не работает :)
Либо так писать нельзя, либо у меня опять где-то ошибки запартизанились. Спасибо за ссылку, там столько всего интересного! Firebug говорит, что второй getElementsByName is not a function |
<form name="forma">
<input type="text" />
</form>
<script type="text/javascript">
alert(document.getElementsByName('forma')[0].elements[0].tagName.toLowerCase());
</script>
|
monolithed,
этот пример и у меня работает. А мой - нет. Видимо придется перебором найти нужный элемент :( Мне не сложно (тем более, что не я буду перебирать), но это выглядит неправильным. |
| Часовой пояс GMT +3, время: 02:51. |