Как передать параметры из дочернего окна в родительское с задержкой?
Есть родительское окно. В нём стоит обычный select при изменении которого в текстовое поле подставляются выбранные значения из выпадающего списка. Всё прекрасно работает.
Потребовалось дать возможность пользователю добавлять собственные значения, а не только те, что предлагают опции выпадающего списка. Добавил в javascript if/else которые при выборе клиентской опции открывает новое окно. Окно открывается, пользователь производит какие-то действия, затем возвращает в родительское окно opener, всё возвращается, только проблема в том, что javascript уже отработал и возвращённое значение уже никому не нужно. Как быть? Вот кусок кода: var file_name = document.submit_form.file_from_select.value; if (file_name == "new") { window.open("bla-bla-bla"); } ... req.open("GET", "script.cgi?file=" + , true); Соответственно пока открывается новое окно javascript уже доходит до вызова GET, передает туда не данные из открывшегося окна (т.к. там пользователь еще не успел ничего выбрать), а "new", соответственно script.cgi такого значения не находит и нужной работы не выполняет. Какой-то таймаут ставить я не понимаю как, ведь пользователь с этим новым окном может работать и минуту и 10 минут. Как быть и есть ли вообще решение? P.S. В примерах везде приводится открытие нового окна и только после выбора в нем некоего значения возврат к родительскому. В моем же случае у javascript'а уже есть набор необходимых значений и он их обрабатывает не дожидаясь возврата. |
javascript_pupil, при таком открытии окон вы вообще можете остаться без родительского... :)
Как вариант делать "псевдоокно", т.е. обычный див, разукрашеный как окно и все действия производить в нём. Либо showModalDialog! |
Цитата:
на этом можно и остановиться: Цитата:
|
Цитата:
|
Цитата:
|
Я плохо понимаю о чем вы? У меня был и есть скрипт который работал и выполнял свою задачу. Я решил его усовершенствовать и добавил опцию, которая открывает новое окно, в котором можно указать новое название файла.
Новый файл загружается, но для того, чтобы он появился в выпадающем списке необходимо перезагрузить родительскую страницу. Этого я и хотел избежать передавая имя файла (с чем собственно скрипт и проводит манипуляции) обратно к родителю. |
Цитата:
|
Цитата:
|
Цитата:
Достаточно просто обратиться к родительскому окну из дочернего и выполнить в нём нужные преобразования. Цитата:
Может пора более радикально усовершенствовать свой "скрипт"? |
Цитата:
Т.е. мне каким-то образом надо прервать выполнение скрипта, если одно из значений выпадающего списка равно, например, "new'. После этого в новом окне определится название нового файла и через opener будет возвращено родителю. Родитель же продолжит выполнение скрипта, но уже с новым, полученным из дочернего окна значением. Если же переменная не эквивалента заданному значению, то текущий скрипт выполняется как обычно. Как это сделать (вставить доп.условие и прервать выполнение скрипта до получения нового значения) я не знаю. Пытаюсь найти ответ у специалистов по этому языку. :) |
Цитата:
Функция, которую вы хотите прервать, асинхронная. Вместо возврата значения она должна принимать callback-функцию, которую и вызывать со значением, которое необходимо вернуть. Вместо function foo() { return 5; } alert(foo()); Надо function foo(callback) { callback(5); } foo(function(res) { alert(res); }) |
javascript_pupil, таки не в том скрипте ты это делаешь... Пиши скрипт в дочернем окне. Именно он и будет менять родительские данные...
Скрипт в родительском должен закончить работу, если вызвано дочернее окно... Далее без конкретики и тестовых примеров видно дело не продвинется... :) |
Kolyaj, честно говоря ничего не понял из примера.
Цитата:
|
я так понял, что мне проще перегружать AJAX'ом выпадающий список, вызвав соответствующую функцию после загрузки нового файла в дочернем окне. В связи с этим возникли дополнительные вопросы:
1. Как javascript'ом проверить является ли окно дочерним или нет? Т.е. мн необходимо запускать функцию только в том случае, если данное окно было открыто родительским. Если же окно не является дочерним, данная функция запускаться не должна. 2. Пока не могу понять, как AJAX'ом перезагрузить выпадающий список (всё это работает в перловом скрипте). |
Цитата:
document.getElementById('ид_textarea').value=<имя_файла> а вот так var val=document.getElementById('ид_textarea').value document.getElementById('ид_textarea').value=val+<имя_файла> Цитата:
Добавь в селект еще один оптион и сделай его выбраным элементом... Пора тебе делать тестовые примеры. Чего на пальцах-то тренироваться? Цитата:
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <style> </style> <script> </script> </head> <body onload='alert((window.opener)? "дочернее": "родительское")'> <input type='button' value='Go' onclick='window.open("tmp.html")'> </body> </html> Пример скопировать в файл tmp.html и открыть в браузере... |
Всем спасибо за советы и участие!
Самым оптимальным вариантом оказалось использование Ajax'а для перезагрузки выпадающего меню, что собственно и было реализовано. Многие советы и подсказки в этой ветке были интересными и полезными, ещё раз спасибо - они пригодились! |
Часовой пояс GMT +3, время: 21:01. |