Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать параметры из дочернего окна в родительское с задержкой? (https://javascript.ru/forum/misc/13238-kak-peredat-parametry-iz-dochernego-okna-v-roditelskoe-s-zaderzhkojj.html)

Kolyaj 22.11.2010 18:44

Цитата:

Сообщение от javascript_pupil
прервать выполнение скрипта до получения нового значения

Никак.

Функция, которую вы хотите прервать, асинхронная. Вместо возврата значения она должна принимать callback-функцию, которую и вызывать со значением, которое необходимо вернуть.

Вместо
function foo() {
    return 5;
}
alert(foo());

Надо
function foo(callback) {
    callback(5);
}
foo(function(res) {
    alert(res);
})

ksa 22.11.2010 18:59

javascript_pupil, таки не в том скрипте ты это делаешь... Пиши скрипт в дочернем окне. Именно он и будет менять родительские данные...

Скрипт в родительском должен закончить работу, если вызвано дочернее окно...

Далее без конкретики и тестовых примеров видно дело не продвинется... :)

javascript_pupil 23.11.2010 01:55

Kolyaj, честно говоря ничего не понял из примера.

Цитата:

Сообщение от ksa
Пиши скрипт в дочернем окне. Именно он и будет менять родительские данные

Это оказалось проще всего, но я наткнулся на другие грабли. Сейчас объясню где: изменил расположение if/else так, что либо скрипт с уже определенными именами выполняется, либо при выборе нового файла открывается новое окно. Всё замечательно и прекрасно работает. Но! вернуть opener'ом данные в select невозможно, да и смысла нет т.к. их потом не выбрать родительским javascript'ом. Вернуть opener как я понял можно только в данные формы, если же я это успешно делаю, то название файла замещает текст в поле textarea, а мне нужно, чтобы opener не замещал, а добавлял его к уже имеющемуся в форме, иначе вся эта суета теряет смысл. Я так понимаю, что это невозможно?

javascript_pupil 23.11.2010 03:02

я так понял, что мне проще перегружать AJAX'ом выпадающий список, вызвав соответствующую функцию после загрузки нового файла в дочернем окне. В связи с этим возникли дополнительные вопросы:
1. Как javascript'ом проверить является ли окно дочерним или нет? Т.е. мн необходимо запускать функцию только в том случае, если данное окно было открыто родительским. Если же окно не является дочерним, данная функция запускаться не должна.
2. Пока не могу понять, как AJAX'ом перезагрузить выпадающий список (всё это работает в перловом скрипте).

ksa 23.11.2010 09:07

Цитата:

Сообщение от javascript_pupil
название файла замещает текст в поле textarea, а мне нужно, чтобы opener не замещал, а добавлял его к уже имеющемуся

таки пиши не так
document.getElementById('ид_textarea').value=<имя_файла>


а вот так
var val=document.getElementById('ид_textarea').value
document.getElementById('ид_textarea').value=val+<имя_файла>


Цитата:

Сообщение от javascript_pupil
вернуть opener'ом данные в select невозможно

Как так? :blink:
Добавь в селект еще один оптион и сделай его выбраным элементом...

Пора тебе делать тестовые примеры. Чего на пальцах-то тренироваться?

Цитата:

Сообщение от javascript_pupil
Как javascript'ом проверить является ли окно дочерним или нет?

Как вариант...

<!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 и открыть в браузере...

javascript_pupil 23.11.2010 21:42

Всем спасибо за советы и участие!

Самым оптимальным вариантом оказалось использование Ajax'а для перезагрузки выпадающего меню, что собственно и было реализовано. Многие советы и подсказки в этой ветке были интересными и полезными, ещё раз спасибо - они пригодились!


Часовой пояс GMT +3, время: 20:00.