Как присвоить значение элементу формы материнского окна из дочернего?
Добрый день! Возможно ли вообще это сделать?
Есть форма <form name="mother" id="mother"> <input type="text" name="getvalue" id="getvalue" value="" /> </form> Я открываю дочернее окно function newwin() { var params = "width=300px, height=400px" var newWin = window.open("dotter.html", "_blank" , params) newWin.focus() теперь, я хочу чтобы при onClick где нибудь в дочернем окне, текстовому полю главного окна input type="text" name="getvalue"присвоилось значение "fgkjfk" или какой нить переменной, window.opener.document.getElementById('getvalue'). value="fgkjfk" не работает. Прошу вашей помощи. Заранее спасибо! |
window.parent.document.getElementById('getvalue').value="fgkjfk"; |
Неа, не работает, так я тоже пробовал...
|
var k=window.parent.document.getElementById('getval'); alert(k);получаю значение null а если заменить parent на opener, то вообще никакого alert'a нет Получается, что эти два метода вообще мимо? |
opener, наверное, null равен. Бывает такое. Можно попробовать так сделать.
function newwin() { var params = "width=300px, height=400px" var newWin = window.open("dotter.html", "_blank" , params) newWin.focus() newWin.setValue = function(value) { document.getElementById('getvalue').value=value; } } А в дочернем окне писать window.setValue('sdfsf'); |
К сожалению, это тоже не работает, просто ничего не происходит..
|
var k=window.parent.location; alert(k); выдает почему то ссылку на дочернее окно, а не на материнское.. |
Потому что parent -- это про фреймы.
Цитата:
|
Цитата:
|
Uncaught TypeError: Object [object DOMWindow] has no method 'setValue'
Это то что выдает Хромовский дебагер |
Вопрос остается в силе. Кто знает, подскажите, есть решение, которое хоть как то работает. а точнее работает только в ФФ:
function newwin() { var params = "width=300px, height=400px" var newWin = window.open("dotter.html", "_blank" , params) newWin.focus() newWin.setValue = function(value) { document.getElementById('getvalue').value=value; } } Как сделать его кросс браузерным? Заранее спасибо! |
Неужто same-origin policy?!
Допустим, вы обращаететсь к основной странице как что-то-там/index.html, тогда если написать: var newWin = window.open("*!*что-то-там/*/!*dotter.html", "_blank" , params)то в хроме начинает работать. В опере - не начинает. Еще одна причина ненавидеть попапы :-E |
Да, но бывает, что для юзабилити они очень подходят..
Да, но бывает, что для юзабилити они очень подходят...:(
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <input id="input" type="text"> <a href="#" onclick=" var params = 'width=300px, height=400px'; var newWin = window.open('19.html', '_blank' , params); ">link</a> </body> </html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <script type="text/javascript"> window.opener.document.getElementById('input').value = 2; </script> </body> </html> так работает в ie 8, opera 9, chrome Цитата:
|
libinstyle, я вот тоже сейчас развлекаюсь, тупо через window.opener работает везде: IE 6, 7, 8, Chrome 2, Safari 4, Opera 10.6, FireFox 3.6.
Вы проверяли предположение Kolyaj? Цитата:
|
Теория здесь следующая. Броузеры загружают файлы в себя (в окна, во фреймы) асинхронно. Делают это они в отдельных потоках. И заранее не известно, когда произойдет процесс полной загрузки. Причём Fire Fox и Opera делают это со свойственными им прибамбасами. В то же время javascript продолжает работать...
см. http://javascript.ru/window.open Это значит, что в общем случае, когда Вы объявили newWin = window.open("dotter.html", "_blank" , params) и сразу следующей строкой назначили функцию окну newWin.setValue = function() ....,то функция setValue хоть и присвоится окну, но после загрузки страницы в окно сразу же затрётся телом загруженного документа (в Вашем случае dotter.html) Поэтому функцию доступа к объектам материнского окна необходимо вставлять в текст скрипта дочернего окна (в dotter.html) пример. материнская форма: <form> <input type="text" name="getvalue" id="getvalue" value="abcd"> </form> <script type="text/javascript"> function newwin() { var params = "left=100px, top=300px, width=500px, height=200px"; newWin = window.open("dotter.html", "_blank", params) newWin.focus(); } </script> <a href="javascript:newwin()">start newwin</a> дочерняя форма (dotter.html): <script type="text/javascript"> function buttononclick() { window.opener.document.getElementById('getvalue'). value = document.getElementById('dotterinput').value; } </script> <input name=dotterinput id=dotterinput type="text" value="12345"> <button onclick=buttononclick()>GO</button> Это работает в Opera, Fire Fox, Google Chrome и даже в IE 6. Хочу предупредить, что если Вы экспериментируете со скриптами на локальном компьютере, то Google Chrome хоть и показывает объект window.opener, но дальше никуда не пускает. Он не показывает window.opener.document, соответственно нельзя воспользоваться window.opener.document.getElementById(). Но это не страшно, т.к. после загрузки скриптов на реальный сервер Google Chrome "попускает" ;) В некоторых случаях для получения доступа из дочернего окна к элементам материского окна прийдётся указать document.domain='lalalala.com' А вообще мой совет - не используйте window.open(). Практически его оставили только для совместимости со старыми скриптами. Всплывающие окна, вызванные window.open() сейчас раздражают большинство людей. Какая альтернатива? - На этом сайте в какой-то статье описывалось как создать свои собственные окна на примере замены стандартного "alert()" |
Часовой пояс GMT +3, время: 10:43. |