За последние 24 часа нас посетили 22337 программистов и 1035 роботов. Сейчас ищут 832 программиста ...

Возврат в родительское окно данных из всплывающего окна

Тема в разделе "JavaScript и AJAX", создана пользователем bullder, 25 янв 2008.

  1. bullder

    bullder Активный пользователь

    С нами с:
    25 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Вообщем то более чем понятно как создать окошко и передать данные в форму всплывающего окна... но как потом эти данные вернуть в исходное родительское окно и желательно без его перезагрузки... или без монструозного AJAX тут не обойтись?
     
  2. Anonymous

    Anonymous Guest

    window.opener <- копать туда.
     
  3. antonio2000

    antonio2000 Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    11
    Симпатии:
    0
    открываешь окно явой
    HTML:
    1.  
    2.  
    3. <script language="Javascript" type="text/javascript">
    4. openwindow=window.open('название_скрпта','Пошук')
    5. openwindow.focus();
    6.  

    передача назад из нового окна:
    HTML:
    1.  
    2. <script language="Javascript" type="text/javascript">
    3. function returnname(returnlogin)
    4. {
    5. window.opener.document.getElementById('имяпеременной').value=значение;
    6. window.opener.focus();
    7. window.close()
    8. }
    9.  
    10.  
     
  4. bullder

    bullder Активный пользователь

    С нами с:
    25 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Ох более развёрнутого ответа и нельзя было ожидать... огромно спасибо за уделенное внимание...
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ты на яве программить умеешь? Напишешь мне игру?
     
  6. Леонид

    Леонид Активный пользователь

    С нами с:
    8 фев 2008
    Сообщения:
    1
    Симпатии:
    0
    С утра был озадачен такой же проблемой. В нете инфы просто нет! Ужас. Но, вроде, рабобрался в теме и вот готовое решение, которое полностью соответствует твоему ТЗ.

    Вот кнопка открытия всплывающего окна и поле, в которое передадутся данные (вставляем в любое место документа)
    Код (Text):
    1. <script language="JavaScript">
    2. <!--
    3. function changeBut(n) {
    4. document.forms[0].here.value = n;
    5. }
    6. //-->
    7. </script>
    8. <form>
    9. <input type=text name=here>
    10. <input type="button" value="Открыть окно" onClick='window.open("in.htm", "wf", "toolbar=0,width=300,height=100");'>
    11. </form>
    А вот само всплывающее окно (файл in.htm)
    Код (Text):
    1. <html>
    2. <body>
    3. <form name=aaa>
    4. <input type='text' size=20 value='' name='aname'>
    5. <input type="button" value="передать значение" onClick="window.opener.changeBut(document.aaa.aname.value); self.close()">
    6. </form>
    7. </body>
    8. </html>
    При нажатии на "открыть окно" появится всплывающее окошко с полем для ввода (число полей можно увеличить, но тогда в функции нужно увеличить число переменных). При нажатии во всплывающем окне кнопки "передать значение", окно закрывается, а данные передаются в родительское окно. Как ты и хотел - без перезагрузки родительского окна.
    Усложнять можно до бесконечности, но общий алгоритм, думаю, тебе ясен.
     
  7. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    такой синтаксис устарел уже у хеттов.
    Используйте document.getElementByid()
     
  8. Tulku

    Tulku Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    14
    Симпатии:
    0
    Разобраться в данных примерах так и не смог. :( Но нечто подобное нашел и использую.
    PHP:
    1.  
    2. ?>
    3.     <script language="JavaScript">
    4. function newWindow(file,window) {
    5. msgWindow=open(file,window,'resizable=no,width=650,height=350,top=25,left=200');
    6. if (msgWindow.opener == null) msgWindow.opener = self;
    7. }
    8. </script>
    9. <?
    10. # Вызываем новое окно
    11.     ."<input type=\"button\"  value=\"  Выбрать  \" onClick=\"newWindow('modules.php?name=NukeJokes&file=add_pic&username=$username','window')\">"
    12.  
    13. # Сюда передаем данные из дочернего окна. Имя формы post.
    14. <input type=\"text\" name=\"nump\" value=\"$c_title\" >
    15.  
    16.  
    В новом окне вставляем код
    PHP:
    1.  
    2.         echo "<script language=\"JavaScript\">\n";
    3.         echo "function setForm() {\n";
    4.         echo "opener.document.post.eid.value = document.submit_file.eid.value;\n";
    5.         echo "opener.document.post.nump.value = document.submit_file.nump.value;\n";
    6.         echo "self.close();\n";
    7.         echo "return false;\n";
    8.         echo "}\n";
    9.         echo "</script>\n";
    10.         echo "<form name=\"submit_file\" onSubmit=\"return setForm();\">";
    11.         echo "<input type=\"hidden\" name=\"eid\" value=\"$firm_cats\">";
    12.         echo "<input type=\"text\" name=\"nump\" value=\"$c_title\">";
    13.         echo "<br><br><input style=\"width=400px\" type=\"submit\" value=\"Завершить\">";
    14.         echo "</form>";
    При этом все работает нормально. А при попытке использовать вместо имени поля переменную, куда передается значение. Все накрывается медным тазом. И полное отсутствие возможности сгенерировать имена в цикле.
    >Используйте document.getElementByid()
    Не получается, из-за мудреных примеров в этом посте.

    Также сопутствующий вопрос. Как можно передать значения не в поле для ввода, а в переменную. При том условии что колво переменных не статично.
     
  9. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Десять строк кода - мудреные ответы???

    Ганс, убери его.
     
  10. Anonymous

    Anonymous Guest

    topas, хотели демократию, получите теперь. ;)
     
  11. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Горбунов Олег
    Хоть один пост где я что-то требовал от форума.
     
  12. Anonymous

    Anonymous Guest

    topas ты не сопротивлялся )
     
  13. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Горбунов Олег
    может быть... кажется это называется "нейтралитет"

    Помнишь тему про слонов? это был мой единственный знак протеста против тупых вопросов.
     
  14. Tulku

    Tulku Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    14
    Симпатии:
    0
    Это вообще чего?

    HTML:
    1. window.opener.document.getElementById('имяпеременной').value=значение;
    Какой переменной? У меня есть имя формы в которую передаю и имя поля ввода, плюс значение которое присваивается полю.
     
  15. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    window.opener.document.getElementById('id элемента');

    По порядку.
    window - наш родитель, один из главных объектов браузера
    opener - родительское окно, которое открыло наш window
    document - обращаемся к документу родительского окна
    getElementById - получить узел по его id

    Например:
    HTML:
    1. <input type='text' value=123 name='имя_переменной' id='main_input' />
    2.     alert(document.getElementById('main_input'));
    3.     alert(document.getElementById('main_input').value);
     
  16. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Элемент input, имя - aname
    После отправки формы, значение этого поля будет доступно в PHP через $_POST['aname']...
    value='' - это начальные данные в этом элементе, попробуйте поставить value='sometext' и посмотреть результат
     
  17. antonio2000

    antonio2000 Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    11
    Симпатии:
    0
    Обязательно....
     
  18. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  19. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Улыбнуло =)
     
  20. Tulku

    Tulku Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    14
    Симпатии:
    0
    Зрительный обман получился :) двойной ковычки нет. Вопрос снимается.

    С передачей вроде разобрался, работает. Всем спасибо!
     
  21. Tigrish

    Tigrish Активный пользователь

    С нами с:
    26 июл 2008
    Сообщения:
    54
    Симпатии:
    0
    Спасибо за подробную информацию. Из всплывающего окна данные отлично возвращаются.
    Возникла необходимость сначала отослать данные из первичной формы во всплывающее окно. Как это можно сделать?
     
  22. Tigrish

    Tigrish Активный пользователь

    С нами с:
    26 июл 2008
    Сообщения:
    54
    Симпатии:
    0
    Возникла еще одна проблема при передачи данных из всплывающего окна.
    Если данные содержат кавычки (двойные или одиночные), то строка обрывается на первой же из них. Как можно защитить строку и донести в родительское окно в исходном виде?

    Буду очень благодарна за помощь.
     
  23. Tigrish

    Tigrish Активный пользователь

    С нами с:
    26 июл 2008
    Сообщения:
    54
    Симпатии:
    0
    Ситуация такая. Во всплывающем окне можно добавить в бд новые данные (одна строка).
    Это код записи данных в бд.
    PHP:
    1.  
    2. // Отправляем в бд новые данные
    3. $sql  = "INSERT INTO `TOVAR` ( NAME, ZAVOD, STRANA ) VALUES ('".addslashes(trim($_GET["new_title"]))."', '".addslashes(trim($_GET["new_zavod"]))."', '".addslashes(trim($_GET["new_strana"]))."') ";
    4.             $res = mysql_query($sql) or die("query faild: ". mysql_error());
    5.  
    6. //  Находим ID только что добавленных данных
    7.             $zapros = "SELECT MAX(ID) FROM `TOVAR` WHERE (KL_ADDED_ID = '".$_SESSION["FUserID"]."') ";
    8.             $res = mysql_query($zapros) or die("query faild: ". mysql_error());
    9.             while ($line = mysql_fetch_assoc($res))   {
    10.                 $prod_id = $line['ID'];
    11.             }
    12. //  данные, чтобы отправить в родительское окно через JS         
    13.             $prod_name = $_GET["new_title"];
    14.             $prod_zavod = $_GET["new_zavod"];
    15.             $prod_strana = $_GET["new_strana"];
    16.                                        
    17.                        
    18.             print $text = " <script language='JavaScript' type='text/JavaScript'>
    19.                             <!--
    20.                                 window.opener.changeBut(". $prod_id. ", ". $prod_name. ", ".$prod_zavod.", ". $prod_strana. " );
    21.                                 window.opener.focus();
    22.                                 self.close();
    23.                             //-->
    24.                             </script>";
    Так вот скрипт отлично добавляет данные в бд, но не отправляет данные в родительское окно. Всплывающее тоже не закрывает.
    В чем моя ошибка?