Диалоговое окно -> форма

bovkun

Новичок
Диалоговое окно -> форма

Народ, помоги, плиз.
Есть задумака, а как реализовать не знаю. Но чувствую, что без JavaScript тут не обойтись...

Вот пример:

На странице "PAGE.php" есть ссылка, ну скажем "Добавить", которая указывает на страницу "FORM.php", на которой есть форма. При заполненнии формы данные отравляются в "SCRIPT.php", где происходятя какие-то запланированные действия, ну а потом через HEADER возвращаемся опять на "page.php".

Т.е. во время выполнения вышеуказанных события, по сути, мы видим в одном и том же окне броузера смену страниц в поочередности PAGE->FORM->(SCRIPT)->PAGE.

В принципе, совершенно обычная ситуация, но согласитесь, если посмотреть с практической стороны, загрузка страницы "FORM.php" на всё окно браузера, если нужно заполнить ВСЕГО одно или пару полей в форме, не совсем оправдано. Приходиться вынужденно, что-то городить с дизайном страницы с этим одним полем. И как не крути, толкового выхода нет. В любом случае получается, что мы навредим общему дизайну сайта и страницы, если мы в результате родим практически "лысую" страницу.

Друго дело если приспособить "FORM.php" в качестве ДИАЛОГОВОГО ОКНА ВЕБ-СТРАНИЦЫ, которое бы открывалось по центру окна и по своему размеры было бы уместным. Как это сделать - тоже не проблема.

Но вот вопрос, собственно говоря :):

Как сделать так, что бы после заполнения и отправки формы это диалогомое окно (т.е. "FORM.php") закрылось, а работа "SCRIPT.php" (и соответственно перегрузка основной страницы "PAGE.php") происходило В ТОМ ЖЕ ОКНЕ БРАУЗЕРА с которого мы и начинали (т.е. и не в этом диалоговом окне и не создавая нового) ???????
Думаю, что дело в правильной организации "SCRIPT.php". Как его заставить работать с "родительским" окном ?

Согласитеь, что работать с обычной веб-страницей "нарисованной" под стандартное диалоговое окно Windows, пользователю будет гараздо удобней и приятней! :)

ЗЫ Сейчас пободные приемы начали чаще использоваться

Очень удобно! ))
 

DiMA

php.spb.ru
Команда форума
в новом окне:

<form target=_parent urle=submit.php>

в submit.php:

<script> window.close() </script>
 

aloner

Guest
Согласитеь, что работать с обычной веб-страницей "нарисованной" под стандартное диалоговое окно Windows, пользователю будет гараздо удобней и приятней!

Не соглашусь. Это не так.
 

bovkun

Новичок
Автор оригинала: aloner
Не соглашусь. Это не так.
Я не спорю, что иногда бывают ситуации в которых это не так. Но в основной массе -- БЕССПОРНО так!

Ну какой кайф тянуть всю страницу со все начинкой (графика, таблицы, хэдэры, футеры и все такое), если можно загрузить только <FORM .. ><input ..><button .. ></FORM> и всё !?
 

bovkun

Новичок
Автор оригинала: DiMA
в новом окне:

<form target=_parent urle=submit.php>

в submit.php:

<script> window.close() </script>
Б-р-р-р... Это как? :eek: тэг <form>, на сколько мне известно не поддерживает target !.... Тем более, что предложенный вариант, на самом деле не работает. :( Что жаль.... Только с фрэймами ((

ПОМОГИТЕ, КТО МОЖЕТ :)
 

Frol

Новичок
Ты сказал на JavaScript, так изучай его и сможешь сделать не только это! :)
 

DiMA

php.spb.ru
Команда форума
> bovkun

хватить гнать пургу. Если не понял мой пример - отложи дебаты и иди изучать непонятные слова в ман по HTML. Разжевывать все до конца я не буду, но решение написано. Треп не поможет.
 

bovkun

Новичок
Мдаа. Вижу, с target я оказался не прав. Он работает и с <form>, хотя в документации по HTML4 об этом, кажется, ни слова. 8-/ Я весь manual пересмотрел... :(

Но у меня вариант типа "<form method="post" action="script.php" target="_parent">" не работает :(

... постараюсь уточнить и локализовать проблему, возможно кто-то опытным глазом узреет проблемы.

В <head> PAGE.php лежит скрипт, который чудно открывает по самому цетру окошко нужноо размера

PHP:
<script type=text/javascript>
var win= null;
function NewWindow(mypage,myname,w,h,scroll){
  var winl = (screen.width-w)/2;
  var wint = (screen.height-h)/2;
  var settings  ='height='+h+',';
      settings +='width='+w+',';
      settings +='top='+wint+',';
      settings +='left='+winl+',';
      settings +='scrollbars='+scroll+',';
      settings +='resizable=yes';
  win=window.open(mypage,myname,settings);
  if(parseInt(navigator.appVersion) >= 4){win.window.focus();}
}
</script>
На этой же странице ссылка:
PHP:
<a href="form.php" onclick="NewWindow(this.href,'name','300','200','yes');return false">Добавить</a>
В "FORM.php" форма:
PHP:
<form name="form1" method="POST" action="script.php" target="_parent"> ...
При субмите все работает правильно, только, в кнечном итоге, ни как не удается вернуться в родительское окно. Все делается или открытом окне (если "_self" и даже если "_parent" !) или создается еще одно окно (если "_blank" или что-то еще). Значит работает, но не так как надо. Но почему???

Я походил по форуму, оказывается подобные вопрсы возникают не редко, но для себя подходящего ответа найти не смог. (((

Предлягаются разные варианты, но куда их точно засунуть, я не пойму...

PHP:
document.myForm.target="_parent"
opener.location='ссылка'
target="window.opener.name"
frameName.location.href = "_parent"
document.all.homeLink.target = "_parent"
document.links[3].target = "_parent"
opener.document.forms['nameOfYourForm'].submit()

Я все перепробовал в разных вариантах, хотя не особо понимаю, что нужно делать, а толку ... 8-/

ЗЫ С window.close() все понятно.
Dima, не злись, плиз! Я над этой штукой уже почти сутки сижу :)

SOS
 

bovkun

Новичок
> Maxim Matyukhin

Жаль, но не работает...

ЗЫ Скрипт продолжает работать в диалоговом окошке (
 

Arthur

Good Member
обзови своё основное окно как-нить. например
<script language=javascript>
window.name="glavn";
</script>
и пропиши в своём диалоговом окне
<form action="script.php" method="post" target="glavn">
 

Paul

Guest
Автор оригинала: Arthur
А куда ОНО денется-то ?
Прошу прощения. Возникла подобная же проблема. Хотел было уже писать вопрос сюда, но покопавшись в поиске нашел это решение.

Оно и вправду работает, все ок.

Но! Как всегда есть но.

Оно работает в Internet Explorer.

В Mozill-e и FireFox-е оно работать не захотело.

В чем тут может быть проблема, подскажите пожалуйста? (за исключением конечно кривизны моих рук :-/)

-~{}~ 16.08.05 16:13:

Это опять я со своими тупыми проблемами разных окон.

Ну вообщем задачу кое-как удалось решить.... но как всегда не совсем.

Вначале о том, где же лежала собака...


Напомню проблему. Была страничка в основном окне, реализованная скриптиком. В нем была ссылка, по которой открывалось новое окно, с формой.

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

Проблема казалось решилась тем, что в первом, главном, окне была сделана добавочка window.name="my_super_mega_page";, обзывающая его.
А на страничке формы в тэге form было прописано target="my_super_mega_page".

К сожалению оказалось, что это работает в IE, но почему-то не хочет работать, к примеру, в Мозилле.
Баг оказался следующим...

Так как после заполнения формы она вроде бы как пользователю больше и не нужна, то соответственно после нажатия Сабмит, она закрывалась, то бишь тэг форм выглядел следуюшим образом:

<form action="page1.php" method="post" target=" my_super_mega_page " onsubmit="window.close()" >

Ну с точностью до синтаксиса – извините пишу по памяти, может быть в синтаксисе есть несколько ошибочек, но на самой страничке все ок.

Проблема оказалась именно в этом window.close().
После его удаления все заработало нормально и в IE и в Мозиллах.
Ну только вот окошко с формой остается висеть.

В связи опять с этим возникли два вопроса.

Первый. Правильно ли я понимаю, что Мозилла получается ловит ОнСабмит первым делом после чего закрывает окошко, ну и собственно больше ничего не происходит – окошко-то умерло.
В отличие от Эксплорера, который вначале отправляет данные в скрипт, а потом уже реагирует на ОнСабмит и убивает окошко.

Это звучит для меня достаточно невероятно, поэтому я и хочу поинтересоваться, возможно ли такое в принципе?

Ну и второе.
А как решить проблему-то?
Ведь нехорошо, что окошко с формой будет висеть... А как же его еще можно убить?
 
Сверху