Вообщем то более чем понятно как создать окошко и передать данные в форму всплывающего окна... но как потом эти данные вернуть в исходное родительское окно и желательно без его перезагрузки... или без монструозного AJAX тут не обойтись?
открываешь окно явой HTML: <script language="Javascript" type="text/javascript"> openwindow=window.open('название_скрпта','Пошук') openwindow.focus(); </script> передача назад из нового окна: HTML: <script language="Javascript" type="text/javascript"> function returnname(returnlogin) { window.opener.document.getElementById('имяпеременной').value=значение; window.opener.focus(); window.close() } </script>
С утра был озадачен такой же проблемой. В нете инфы просто нет! Ужас. Но, вроде, рабобрался в теме и вот готовое решение, которое полностью соответствует твоему ТЗ. Вот кнопка открытия всплывающего окна и поле, в которое передадутся данные (вставляем в любое место документа) Код (Text): <script language="JavaScript"> <!-- function changeBut(n) { document.forms[0].here.value = n; } //--> </script> <form> <input type=text name=here> <input type="button" value="Открыть окно" onClick='window.open("in.htm", "wf", "toolbar=0,width=300,height=100");'> </form> А вот само всплывающее окно (файл in.htm) Код (Text): <html> <body> <form name=aaa> <input type='text' size=20 value='' name='aname'> <input type="button" value="передать значение" onClick="window.opener.changeBut(document.aaa.aname.value); self.close()"> </form> </body> </html> При нажатии на "открыть окно" появится всплывающее окошко с полем для ввода (число полей можно увеличить, но тогда в функции нужно увеличить число переменных). При нажатии во всплывающем окне кнопки "передать значение", окно закрывается, а данные передаются в родительское окно. Как ты и хотел - без перезагрузки родительского окна. Усложнять можно до бесконечности, но общий алгоритм, думаю, тебе ясен.
Разобраться в данных примерах так и не смог. Но нечто подобное нашел и использую. PHP: ?> <script language="JavaScript"> function newWindow(file,window) { msgWindow=open(file,window,'resizable=no,width=650,height=350,top=25,left=200'); if (msgWindow.opener == null) msgWindow.opener = self; } </script> <? # Вызываем новое окно ."<input type=\"button\" value=\" Выбрать \" onClick=\"newWindow('modules.php?name=NukeJokes&file=add_pic&username=$username','window')\">" # Сюда передаем данные из дочернего окна. Имя формы post. <input type=\"text\" name=\"nump\" value=\"$c_title\" > В новом окне вставляем код PHP: echo "<script language=\"JavaScript\">\n"; echo "function setForm() {\n"; echo "opener.document.post.eid.value = document.submit_file.eid.value;\n"; echo "opener.document.post.nump.value = document.submit_file.nump.value;\n"; echo "self.close();\n"; echo "return false;\n"; echo "}\n"; echo "</script>\n"; echo "<form name=\"submit_file\" onSubmit=\"return setForm();\">"; echo "<input type=\"hidden\" name=\"eid\" value=\"$firm_cats\">"; echo "<input type=\"text\" name=\"nump\" value=\"$c_title\">"; echo "<br><br><input style=\"width=400px\" type=\"submit\" value=\"Завершить\">"; echo "</form>"; При этом все работает нормально. А при попытке использовать вместо имени поля переменную, куда передается значение. Все накрывается медным тазом. И полное отсутствие возможности сгенерировать имена в цикле. >Используйте document.getElementByid() Не получается, из-за мудреных примеров в этом посте. Также сопутствующий вопрос. Как можно передать значения не в поле для ввода, а в переменную. При том условии что колво переменных не статично.
Горбунов Олег может быть... кажется это называется "нейтралитет" Помнишь тему про слонов? это был мой единственный знак протеста против тупых вопросов.
Это вообще чего? HTML: window.opener.document.getElementById('имяпеременной').value=значение; Какой переменной? У меня есть имя формы в которую передаю и имя поля ввода, плюс значение которое присваивается полю.
window.opener.document.getElementById('id элемента'); По порядку. window - наш родитель, один из главных объектов браузера opener - родительское окно, которое открыло наш window document - обращаемся к документу родительского окна getElementById - получить узел по его id Например: HTML: <input type='text' value=123 name='имя_переменной' id='main_input' /> <script> alert(document.getElementById('main_input')); alert(document.getElementById('main_input').value); </script>
Элемент input, имя - aname После отправки формы, значение этого поля будет доступно в PHP через $_POST['aname']... value='' - это начальные данные в этом элементе, попробуйте поставить value='sometext' и посмотреть результат
Археологи, блин. И вообще сейчас за такие вещи цепляться не политкорректно. http://habrahabr.ru/blog/games/39515.html
Зрительный обман получился двойной ковычки нет. Вопрос снимается. С передачей вроде разобрался, работает. Всем спасибо!
Спасибо за подробную информацию. Из всплывающего окна данные отлично возвращаются. Возникла необходимость сначала отослать данные из первичной формы во всплывающее окно. Как это можно сделать?
Возникла еще одна проблема при передачи данных из всплывающего окна. Если данные содержат кавычки (двойные или одиночные), то строка обрывается на первой же из них. Как можно защитить строку и донести в родительское окно в исходном виде? Буду очень благодарна за помощь.
Ситуация такая. Во всплывающем окне можно добавить в бд новые данные (одна строка). Это код записи данных в бд. PHP: // Отправляем в бд новые данные $sql = "INSERT INTO `TOVAR` ( NAME, ZAVOD, STRANA ) VALUES ('".addslashes(trim($_GET["new_title"]))."', '".addslashes(trim($_GET["new_zavod"]))."', '".addslashes(trim($_GET["new_strana"]))."') "; $res = mysql_query($sql) or die("query faild: ". mysql_error()); // Находим ID только что добавленных данных $zapros = "SELECT MAX(ID) FROM `TOVAR` WHERE (KL_ADDED_ID = '".$_SESSION["FUserID"]."') "; $res = mysql_query($zapros) or die("query faild: ". mysql_error()); while ($line = mysql_fetch_assoc($res)) { $prod_id = $line['ID']; } // данные, чтобы отправить в родительское окно через JS $prod_name = $_GET["new_title"]; $prod_zavod = $_GET["new_zavod"]; $prod_strana = $_GET["new_strana"]; print $text = " <script language='JavaScript' type='text/JavaScript'> <!-- window.opener.changeBut(". $prod_id. ", ". $prod_name. ", ".$prod_zavod.", ". $prod_strana. " ); window.opener.focus(); self.close(); //--> </script>"; Так вот скрипт отлично добавляет данные в бд, но не отправляет данные в родительское окно. Всплывающее тоже не закрывает. В чем моя ошибка?