Есть родительское окно Код (Text): <script type="text/javascript"> function HTML_edit( action ) { area = document.getElementById('textfield'); // получаем объект поля ввода area.focus(); // перед началом работы переводим фокус на текстарею (иначе в IE не будет работать) // получаем выделенный текст и подготавливаем его к обработке if( document.getSelection ) { document.getSelection(); avalue = area.value; sel_length = avalue.length; sel_start = area.selectionStart; sel_end = area.selectionEnd; left_side_text = avalue.substring(0, sel_start); selected_text = avalue.substring(sel_start, sel_end); selected_text1 = avalue.substring(0, sel_start); right_side_text = avalue.substring(sel_end, sel_length); } // для остальных браузеров (IE), не понимающих работу с «выделениями», приведенную выше else if( document.selection ) selected_text = document.selection.createRange().text; // обрабатываем выделенный текст на основе переданного аргумента action switch( action ) { case 'tegImage2': if(!selected_text ) { var openWindow = window.open("post.html","","width=600,height=430"); var url = ???;//Как получить сюда переменную из дочернего окна prefix = '<img src="/foto/'+ url +'">'; suffix = '\n'; } break; } // возвращаем результаты работы функции обратно в поле ввода текста if( prefix != null && suffix != null ) { if( document.getSelection ) area.value = left_side_text + prefix + selected_text + suffix + right_side_text; else if( document.selection ) document.selection.createRange().text = prefix + selected_text + suffix; } } </script> <input type="button" value="IMG2" onclick="HTML_edit('tegImage2')" /> <textarea style="width:70%;height:350px" wrap="off" id="textfield"></textarea> Есть дочернее окно Код (Text): <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> <h2>Введите данные изображения</h2> <input id="myID"> <input type="button" value="Готово" onclick=" window.opener.HTML_edit (document.getElementById ('myID').value); self.close ()"> </html> Как получить переменную в var url из дочернего окна???
Верно, что нужно обращаться к свойству "opener", но всё остальное.. Вот ввели вы что-то в дочернем окне, нажали кнопку, в родительском окне вызвалась функция "HTML_edit". Переданный параметр оказался в переменной "action". Эта переменная внутри функции встречается только в "switch(action)". И если у переменной будет значение "tegImage2", только тогда зачем-то откроется опять такое-же дочернее окно, какое было только что. Как работает код понятно, а вот что требуется, не понятно. В функции ещё есть поиск выделенного текста, но выделение будет сбрасываться, если кликать по кнопкам и открывать окна. Так что тем более не понятно. Опишите подробней функционал.
Видимо он имеет ввиду, передать объектную переменную из одного окна в другое =) Если окна находятся в одном объекте и открываются когда запрашиваете, то можно это сделать глобальной переменной этого объекта. И отдавать окнам.
Передать переменную как в дочернее, так и в родительское окно легко. Объясните, что нужно то? Что значит "передать объектную переменную" или "если окна находятся в одном объекте" или "можно это сделать глобальной переменной этого объекта"? melihovgv, ты можешь сформулировать мысль? Я ведь этого от тебя и добиваюсь. Если сможешь сформулировать, то уже пол-дела сделаешь. Возможно, даже код тебе напишу, лишь бы понятно было.
открываю дочернее окно var openWindow = window.open("post.html","","width=600,height=430"); В дочернем окне будет загрузка фото ajax, которое после загрузке будет передаваться в еще один инпут для передачи в родительское окно. Пока дочернее окно открыто, вот этот код не должен выполнятся в prefix = '<img src="/foto/'+ url +'">'; suffix = '\n'; После получаю сюда переменную var url = /*Переменная из дочернего окна.*/; За тем просто выполняется этот код prefix = '<img src="/foto/'+ url +'">'; suffix = '\n'; И все.
Фото будет передаваться в ещё один инпут, как? Имеете ввиду адрес и имя загруженной картинки будут известны после загрузки картинки? Если так, подтверди. Напишу код.
Да, адрес картинки будет передаваться в еще один инпут. Добавлено спустя 37 секунд: Будет использовано в этой форме больше трех инпутов.
Дело в том, что ты ожидаешь, что скрипт остановится при открытии дочернего окна, но работа скрипта продолжается несмотря на то, что мы открыли окно. Код (Text): var openWindow = window.open("post.html","","width=600,height=430"); var url = ???;//Как получить сюда переменную из дочернего окна prefix = '<img src="/foto/'+ url +'">'; Это не prompt и не confirm, на которых скрипт останавливается и ждет, пока не получит ответ от пользователя. Можно использовать функцию window.openDialog, в которой указать доп. свойство, что оно модальное - скрипт в главном окне остановится и будет ждать закрытия дочернего окна. Тогда из этого модального окна можно в главное отправить имя загруженного файла. https://developer.mozilla.org/en-US/docs/DOM/window.openDialog Либо нужно из дочернего окна вызывать отдельную функцию в главном окне. Лучше изменить логику работы. Сохранить на время выделенный текст, открыть окно. Из окна вызвать функцию в главном окне, которая и вставит html в текстовое поле.
В переменную, объявленную вне функции, например. Код (Text): var selection; function abc(){ //тут дадим этой переменной значение selection = ... //открываем окно window.open("post.html",... } //эту функцию вызываем из дочернего окна как window.opener.def(document.getElementById('myID').value) function def(param){ if(selection != undefined){ //если в переменной что-то есть //вставляем html в текстовое поле, используем param, переданный из доч. окна } } В переменной selection можно держать объект, в котором собрать все нужные переменные. Код (Text): var selection; //далее в функции создаем объект selection = {}; selection.left_side_text = ... selection.selected_text = ... selection.right_side_text = ... Это удобно, чтобы не плодить глобальные переменные.
Идея прикольная некоторые моменты пробую сам сейчас, но получается нужно переделывать полностью код. А на нем уже много что работает) Мне бы по проще, если можно. Передать переменную в выше написанную мною функцию.