Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: Forza от 29 Июля 2004, 17:15:39

Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 29 Июля 2004, 17:15:39
Задача: добавить новый option в тег select. Задача усложняется, что тег select находится в окне, открывшем другое окно, в котором исполняется JavaScript, а если точнее, скрипт исполняется в одном из фреймов нового окна.
Но нас это не пугает и для обращения к select мы используем list=parent.opener.document.formName.selectName, и всё работает нормально: можем менять selected элемент, прятать весь select c помощью list.style.display=\'none\' и т.д.

Задача добавления нового option в select на испытаниях была успешно решена, если select и скрипт в одном окне: selectName.options[selectName.length] = new Option (\'....\').

Теперь кульминация: если из фрейма окна №2 обратиться к select\'у окна №1, открывшего окно №2, следующим образом -
list=parent.opener.document.formName.selectName;
list.options[list.length]=new Option (...),

то наступает Ж@ПА, а именно выдаётся броузером JS-ошибка под названием "Ошибка на сервере", и ничего не работает.

Почему такое может быть? В какой ситуации вообще может возникнуть эта самая "ошибка на сервере"? При чём тут вообще сервер, если скрипт записывает значение в другое окно?
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Макс от 29 Июля 2004, 20:07:17
фреймы в одном домене находятся ?
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 29 Июля 2004, 22:43:31
Цитировать
Макс:
фреймы в одном домене находятся ?

Поясни, пожалуйста, что ты имеешь ввиду под доменом.
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Макс от 30 Июля 2004, 01:06:20
например один фрейм имеет адрес
http://www.example.com/bla/bla/bla
а второй фрейм
http://subdomain.example.com/bla/bal/bla
или
http://www.blablabla.com/bla/bal/bla
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 30 Июля 2004, 11:14:03
Тогда в одном домене. Они даже исполняются одним перловским скриптом: http://www.site.com/cgi-bin/script.pl?bla-bla-bla. Отличаются они только в параметрах bla-bla-bla.
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 01 Августа 2004, 11:04:22
Неужели никто не знает, почему такое может быть? :(
Интересно хотя бы узнать из-за чего может возникать ошибка в JavaScipt-скрипте, которую броузер называет "ошибкой сервера".
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Макс от 01 Августа 2004, 14:32:10
а у тебя на локальном компе это все работает или такая же ошибка ?

создай мелнькие ХТМЛ-файлы :
 файл, содержащий твой СЕЛЕКТ
 файл с фрейм-структурой
 и 2 файла для фреймов.
С минимальным ХТМЛ и яваскриптом.
Попробуй, если все это не работает, то выложи на форум.
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 01 Августа 2004, 15:26:48
Цитировать
Макс:
файл, содержащий твой СЕЛЕКТ

main.html. Содержит функции открытия нового окна и добавления нового элемента в




Open New Window

Add New Item To Select

Цитировать
Макс:
файл с фрейм-структурой

Файл frameset.html, открываемый в отдельном окне из main.html:



Цитировать
Макс:
и 2 файла для фреймов

Файл frame1.html. В нём есть функция, которая в зависимости от входного параметра либо изменяет текущее выбранное значение из другого окна идёт в обоих случаях одинаковым образом (parent.opener.document.conditionForm.person_id), а сам момент добавления нового элемента - аналогичен тому, как это происходит в функции addNewItem() файла main.html.




Add New Item To Select

Change Selected Item

Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Макс от 01 Августа 2004, 17:30:45
вот такой код у меня заработал (IE6 & Opera 7.23):







Add New Item To Select


Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 01 Августа 2004, 18:13:55
Макс, огромное спасибо. Всё работает.

А (так для общего развития ;)) есть какие-нибудь идеи, почему мой вариант не работал? Я ведь его брал из мануала ( http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/select.html ), да и для случая "всё в одном окне" было всё ок.

Или это кривость IE? А в "Опере" мой вариант работал?
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Макс от 01 Августа 2004, 19:11:15
Цитировать
Forza:
А (так для общего развития ) есть какие-нибудь идеи, почему мой вариант не работал?

идей нет. Я и сам иногда удивляюсь поведению яваскрипта (или тому, как его интерпретируют некоторые броузеры)
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Forza от 02 Августа 2004, 13:50:55
Тогда последний вопрос.

Я до этого пользовался документацией на "JavaScript Central" http://devedge.netscape.com/central/javascript/, но там нет ни слова про document.createElement() и select.add(), которые ты использовал в своём скрипте. Ты откуда про них узнал? ;) Есть ссылка в Инете на более полную документацию?

Или надо книгу покупать? Какую?

Потому что иначе, без знания всех возможных функций, программирование весьма затруднено. :(
Название: добавление элемента в <select> => "ошибка на сервере"
Отправлено: Макс от 02 Августа 2004, 14:26:00
у каждого броузера свои особенности и свой диалект яваскрипта.
Поэтому лучше всего доки искать на сайте производителя броузера.

В данном случае я использовал
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/select.asp