Не работает 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, время: 00:42. |