Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как передать переменную из родительского окна в выпадающее (opener)?

Сообщения:  [1-10]   [11-18] 

 
 автор: CNT   (21.08.2007 в 18:47)   письмо автору
 
   для: coloboc66   (21.08.2007 в 17:58)
 

А в дочернем окне таймер и не нужен вовсе.
Таймер нужен в окне родительском для случая, если окно дочернее ещё не открылось.
А в дочернем - onload, который передаст в родительское сообщение "я готово" (изменит значение флага Flag с false на true).

PS. Я сейчас в посте (где про два варианта) дополнительно написал жирно - где родитель, а где дочка.

   
 
 автор: coloboc66   (21.08.2007 в 17:58)   письмо автору
 
   для: CNT   (20.08.2007 в 04:13)
 

Да ставил в дочернем окне вместо таймера window.onload и код переставал работать. Оставил таймер.

   
 
 автор: CNT   (20.08.2007 в 04:13)   письмо автору
 
   для: coloboc66   (19.08.2007 в 22:43)
 

Не понял - что не получается?

   
 
 автор: coloboc66   (19.08.2007 в 22:43)   письмо автору
 
   для: CNT   (19.08.2007 в 17:48)
 

Ну да: не получается с window.onload...

   
 
 автор: CNT   (19.08.2007 в 17:48)   письмо автору
 
   для: coloboc66   (19.08.2007 в 11:31)
 

Давайте рассмотрим варианты.

Вариант 1. В родительском окне один раз формируется значение некой переменной (например, клиент ввёл что-то в текстовое окно, или же отметил какой-то чекбокс...) и после этого (переменная уже определена) открывается дочернее окно, куда необходимо это значение передать.

В этом варианте я бы решал задачу так.
В родительском окне прописываю:
// РОДИТЕЛЬСКОЕ ОКНО
var AAA = "передаваемое значение";
window.open ('дочерний_файл.htm?' + escape (AAA), '' , параметры дочернего окна);
А в файле дочернего окна устраиваю разбор query_string
// ДОЧЕРНЕЕ ОКНО
<head><script>
var BBB = unescape (document.location.href.split ('?') [1]);</script>
Таким образом, ещё до формирования тела документа дочернему окну будет передано значение переменной AAA родительского окна.
ИМХО - самый простой и надежный метод (эскейпирование необходимо при передаче не-ASCII символов, типа кириллицы)

-----

Вариант 2. Значение переменной в родительском окне ещё неизвестно, а окно уже открыто. Значение переменной может быть сформировано в родительском окне несколько раз и эти несколько раз нужно будет это значение пердавать в дочернее.
Тогда в родительском окне прописываю:
// РОДИТЕЛЬСКОЕ ОКНО
var Flag = false; //флаг окончания загрузки тела дочернего окна
var newWin = window.open ('дочерний_файл.htm', '' , параметры дочернего окна);
...
//каждый раз (или даже всего один раз), когда нужно передать
var AAA = "передаваемое значение";
if (!Flag) {включаем таймер и дожидаемся открытия дочернего окна, ибо сигнала из него не получено}
else if (!newWin.closed ()) newWin.CCC (AAA);
else {клиент закрыл дочернее окно, передать ничего нельзя}

А в дочернем окне, во-первых, формирую функцию CCC, которая будет запускаться из родительского окна и переданный аргумент присваивать переменной BBB; во-вторых, передаю сигнал в родительское окно об окончании загрузки:
// ДОЧЕРНЕЕ ОКНО
<head>
<script>
var BBB;
function CCC (x) {BBB = x; ну и далее - что нужно с этим BBB делать}
onload = function () {window.opener.Flag = true}
</script>
Т.е. без таймера, если момент передачи из родительского в дочернее неизвестен, всё равно не обойтись, даже используя onload в дочернем окне. А ежели момент известен, и совпадает с открытием дочернего окна (и однократен), то тогда смотри вариант 1.

   
 
 автор: coloboc66   (19.08.2007 в 11:31)   письмо автору
 
   для: Shiva   (19.08.2007 в 11:22)
 

И где его использовать? В дочернем окне?

   
 
 автор: Shiva   (19.08.2007 в 11:22)   письмо автору
 
   для: coloboc66   (19.08.2007 в 09:23)
 

Есть событие window.onload, позволяющее обойтись без таймеров. Здесь вы, по сути, создали прослушивание, дублирующее прослушивание браузера.

   
 
 автор: coloboc66   (19.08.2007 в 09:23)   письмо автору
 
   для: Chronus   (18.08.2007 в 19:10)
 

to Cronus: ваш код без алерта не работает, оказывается. В общем, использовал ваш код и добавил в родительском и дочернем окне по таймеру, как советовал CNT, алерт убрал, после этого всё заработало. Спасибо всем.

   
 
 автор: Chronus   (18.08.2007 в 19:10)   письмо автору
 
   для: coloboc66   (18.08.2007 в 18:23)
 

Всё очень даже просто. Прилагаю наваенный мной сейчас пример.

Шаг 1. Создаём файл №1. Главный.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Main Win</title>
    <script>
    var a="Hello World!";
    function init(){
        var url='childwin.html', win = window.open(url,'winname','toolbar=no,location=no,width=100,height=100');
        window.alert('Click OK and view child win');
        win.document.getElementById('fortext').innerHTML=a;
    }
    </script>
</head>

<body>
<p onclick="init()">CLICK ME!</p>
</body>
</html>


Шаг 2. Создаём файл №2. Дочерний (не забыть назвать childwin.html).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>I'm child Win</title>
</head>

<body>
<p id="fortext"></p>
</body>
</html>


Шаг 3. Наслаждаемся результатом.

Примечание.
Если нужно передать много чего, то предлагаю создать объекты - скрытые слои (в дочернем документе конечно, можно сразу создать, а можно и динамически организовать) и в них всё передавать и хранить.

   
 
 автор: coloboc66   (18.08.2007 в 18:23)   письмо автору
 
   для: Chronus   (18.08.2007 в 18:05)
 

Пробовал пошагово: дохожу до того. что переменная
а получает нужное мне значение и является глобальной, осталось её только передать в дочернее окно, тут всё и стопорится... Короче вопрос такой: имеем в родительском окне
<script>
var a ="Hello";
</script>

Как её передать в выпадающее?

   

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования