Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отправить две формы каждую своему оработчику
 
 автор: Eugene77   (19.10.2009 в 19:59)   письмо автору
 
 

Было две страницы с двумя формами.
У каждой был свой обработчик.
Теперь надо совместить формы на одной странице.
Причём, в начале должна обрабатываться именно первая форма, а не вторая, независимо по какому сабмиту кликнули.
Это важно, потому что первый обработчик пишет в сессию то, что нужно потом второму обработчику.

Кто знает способ сделать это малой кровью? Чтобы не переписывать всё заново...

  Ответить  
 
 автор: АЯ   (19.10.2009 в 22:12)   письмо автору
 
   для: Eugene77   (19.10.2009 в 19:59)
 

Для сабмита формы необходимо ОКНО, в котором должен загрузиться файл, прописанный в атрибуте action тега <FORM>. Если в его качестве для первой формы использовать текущее окно (target="_self" по умолчанию), то сабмит первой формы удалит из текущего окна текущий документ, а вместе с ним удалит и вторую форму.

Поэтому решение таково:
1. На странице прописываете невидимый ифрейм с каким-то именем.
2. В атрибуте target первой формы прописываете имя этого невидимого ифрейма.
3. На невидимый ифрейм "вешаете" функцию на событие onload. И эта функция (после окончания загрузки в ифрейм файла-action первой формы) должна будет изменить глобальную переменную-"флаг" с начального значения false на true.
4. На вторую форму (где target - это текущее окно) на событие onsubmit "вешаете" проверку "флага" на истинность: если OK, то сабмитите, если "флаг" ещё ложный - отказываете в сабмите.

  Ответить  
 
 автор: Eugene77   (20.10.2009 в 11:19)   письмо автору
 
   для: АЯ   (19.10.2009 в 22:12)
 

В целом ясно.
Не уверен только что без ошибок смогу это написать.
Буду пробовать.

  Ответить  
 
 автор: Eugene77   (22.10.2009 в 18:09)   письмо автору
 
   для: АЯ   (19.10.2009 в 22:12)
 

Не получается у меня по событию onload ифрейма изменить значение флага.
При исходной загрузке страницы iframe тоже ведь грузится.
Значит надо как-то отличить начальную загрузку от загрузки после сдачи формы.
В Опере ещё как-то получается. Я пишу:
<iframe onload="if(this.location.href.length>9) flag=true;" >
А в IE это просто приводит к ошибке.

Как правильно сделать установку флага по событию загрузки iframe?....

  Ответить  
 
 автор: АЯ   (24.10.2009 в 09:55)   письмо автору
 
   для: Eugene77   (22.10.2009 в 18:09)
 

<head>
<script>
var flag = 0;
function myFUNC () {flag = 1}
onload = function () {window.frames.myIFRAME.onload = myFUNC}
</script>
</head>
<body>
...
<form name="FORM_1" action="URL_1" target="myIFRAME">...</form>
...
<form name="FORM_2" action="URL_2" onsubmit="if (!flag) {alert ('Error!'); return false}">...</form>
...
<iframe name="myIFRAME" style="display: none"></iframe>
...
</body>
Функция на <IFRAME> здесь "навешивается" ПОСЛЕ окончания загрузки всего тела документа, потому что событие onload на теге <IFRAME> срабатывает даже тогда, когда у src нет никакого значения - в <IFRAME> загружается about: blank и это "зажигает" событие окончания псевдозагрузки в <IFRAME>.

Разумеется, это - лишь один из способов. Можно, например, навесить функцию на onload сразу, прямо в HTML-коде, но тогда придётся ввести ещё один флаг, который будет изменяться сразу после формирования тега <IFRAME> (после первой "псевдозагрузки" пустой страницы).

  Ответить  
 
 автор: Eugene77   (25.10.2009 в 20:14)   письмо автору
 
   для: АЯ   (24.10.2009 в 09:55)
 

Спасибо!
так отлично работает.

  Ответить  
 
 автор: Eugene77   (24.10.2009 в 07:10)   письмо автору
 
   для: АЯ   (19.10.2009 в 22:12)
 

>4. На вторую форму (где target - это текущее окно) на событие onsubmit "вешаете" проверку "флага" на истинность: если OK, то сабмитите, если "флаг" ещё ложный - отказываете в сабмите.

Вот это не получается.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования