Не работает GetItemByName
Имеется скрипт:
[html]
<script TYPE="text/javascript">
function viuw_visible(){document.location.href = "FL_ARCH.DYN_FORM_EVENT_VISIBLE.show?p_arg_names=p_id&p_arg_values="+document.forms[0].GetItemByName("FORM_FLIGHT.DEFAULT.ID.01").value;}
</script>
<a href="java script:viuw_visible()">Параметры видимости</a>[/html]
И при переходе по ссылке происходит ошибка "document.forms[0].GetItemByName is not a function" (в Мозиле).
Подскажите почему так происходит и как мне обойти эту ошибку?
Сзаранее спасибо!
Нужно именно по имени....
если тебе уж конеретно приспичило (понять, правда, не могу зачем), то юзай document.all, в чем проблема-то? :)
[COLOR=Red]но! [COLOR=Black]shaelf прав, так что лучше переделывай на id-шники :)[/COLOR][/COLOR]
А как быть? Дело в том, что имя поля формы "FORM_FLIGHT.DEFAULT.ID.01", соответственно использовать его как нормальное имя нельзя, и по номеру нельзя т.к. могут поля добавляться, убераться, меняться местами и т.д., и менять имя нелзя, т.к. оно автоматически генерируется...
местоположение элемента в документе не имеет значения для getElementById (ну конечно если id уникальный, что должно быть по умолчанию...)
Я НЕ могу менять названия полей и форм.... т.к. их мастер делает... и не только их, но и обработку на сервере..
Более того - данная конструкция это "левой рукой, через правое ухо, до левой пятки".... но она нужна в том или ином виде...
p.s. Ты думаеш я "forms[0]" просто так написал... имя формы автоматически генерируется...
могу, как я по твойму этот код вношу, но изменять поля не могу...
[html]<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><#ID#></TD></TR><TR><TD><#FLIGHT.LABEL#></TD><TD><#FLIGHT.ITEM#></TD></TR><TR><TD><#TYPE.LABEL#></TD><TD><#TYPE.ITEM#></TD></TR><TR><TD><#DATE_TIME.LABEL#></TD><TD><#DATE_TIME.ITEM#></TD></TR><TR><TD><#NUMBER_EVENT.LABEL#></TD><TD><#NUMBER_EVENT.ITEM#></TD></TR><TR><TD><#NAME.LABEL#></TD><TD><#NAME.ITEM#></TD></TR><TR><TD><#CREW.LABEL#></TD><TD><#CREW.ITEM#></TD></TR><TR><TD><#CREW_NAME.LABEL#></TD><TD><#CREW_NAME.ITEM#></TD></TR><TR><TD><#SETING_ORBIT.LABEL#></TD><TD><#SETING_ORBIT.ITEM#></TD></TR><TR><TD><#NAME_SETING_ORBIT.LABEL#></TD><TD><#NAME_SETING_ORBIT.ITEM#></TD></TR><TR><TD><#TYPE_VISIBLE_SO.LABEL#></TD><TD><#TYPE_VISIBLE_SO.ITEM#></TD></TR><TR><TD><#MAN_RAP_NAME.LABEL#></TD><TD><#MAN_RAP_NAME.ITEM#></TD></TR><TR><TD><#DATE_TIME_VISIBLE.LABEL#></TD><TD><#DATE_TIME_VISIBLE.ITEM#></TD></TR><TR><TD><#B_TEXT.LABEL#></TD><TD><#B_TEXT.ITEM#></TD></TR><TR><TD><#VISIBLE#></TD><TD>
<script TYPE="text/javascript">
function viuw_visible(){document.location.href = "FL_ARCH.DYN_FORM_EVENT_VISIBLE.show?p_arg_names=p_id&p_arg_values="+document.forms[0].GetItemByName("FORM_EVENTS.DEFAULT.ID.01").value;}
</script>
<a href="java script:viuw_visible()">Параметры видимости</a></TD></TR></TABLE></TD></TR><TR><TD>
[/html]
вот так всё это выгледит при конструировании...
А имена полей и форм я узнал потём "браузер -> посмотреть html код".)
ну тогда хз, document.all попробуй. а то у тебя всё через метод. которого в мозилле точно нет )
гадко... :-(
При всём уважении.... имя поля "FORM_EVENTS.DEFAULT.ID.01", ну и о каком "docement.formName.rowName" может идти реч....
А так?
Не должна.
getElementsByName() — кросбраузерное получение коллекции элементов по имени.
По теме:
Может шагать по DOM-у и читать атрибуты?
По теме:
Может шагать по DOM-у и читать атрибуты?
ну не знаю не знаю =) работал именно таким методом старый темплейт написаный до меня, но с именем элемента Blah1.Blah2.Blah3 точно не сканает... я лично предпочитаю использовать getElementById, но в этом случае не подошло.
а вот как всегда пришёл vasa_c и всё разрулил ;) +1, должно сканать.
А так?
:):) Спасибо друг - ты меня прям спас!!!!!!! Респект тебе и УВАЖЕНИЕ:D
И ещё один вопрос :o : если я пишу обработчик события и хочу текст обработчика не выделять в отдельную процедуру (т.е. "onclick="java script:send();"", но что бы в нём была не ссылка на функцию, а текст функции), то как мне это сделать?
Да, мне именно это и нужно, СПАСИБО!
РЫБЯТЫ!!!!!!!!, а понаписали то, понаписали....
А все ведь просто решается. У автора имена полей типизированые "FORM_FLIGHT.DEFAULT.ID.01", т.е. имеет шаблон имени. Через DOM пробегаем рекурсивно все дерево, ищем этот шаблон и делает необходимые действия.
Метод 2. document.forms. Получаем из DOM список всех форм в документе, далее через DOM же работаем с потомками. Причем данный подход вполне хорош ибо используется DOM Level2.
Есть и 3 метод, но второго за глаза.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form action="a.a" method="post" name="форма 1">
<input type="text" name="текст" />
</form>
<p>
<form action="b.b" method="post" name="форма 2">
<input type="text" name="text" />
</form>
</p>
<input type="button" value="формочки" onclick="foo()" />
<script language="javascript" type="text/javascript">
function foo(){
var amount_forms = document.forms.length;
alert('Формочек в дакументу у нас '+amount_forms+' штучек');
for (var i = 0; i < amount_forms; i++)
{
var form = document.forms.item(i);
var arr_element_form = form.elements;
alert('Имя формы: '+form.name);
for (var j = 0; j < arr_element_form.length; j++)
{
var element_form = arr_element_form.item(j);
alert('Имя элемента формы: '+element_form.name);
alert('Значение элемента формы: '+element_form.value);
};
};
}
</script>
</body>
</html>
[/HTML]