|
|
|
| Было две страницы с двумя формами.
У каждой был свой обработчик.
Теперь надо совместить формы на одной странице.
Причём, в начале должна обрабатываться именно первая форма, а не вторая, независимо по какому сабмиту кликнули.
Это важно, потому что первый обработчик пишет в сессию то, что нужно потом второму обработчику.
Кто знает способ сделать это малой кровью? Чтобы не переписывать всё заново... | |
|
|
|
|
|
|
|
для: Eugene77
(19.10.2009 в 19:59)
| | Для сабмита формы необходимо ОКНО, в котором должен загрузиться файл, прописанный в атрибуте action тега <FORM>. Если в его качестве для первой формы использовать текущее окно (target="_self" по умолчанию), то сабмит первой формы удалит из текущего окна текущий документ, а вместе с ним удалит и вторую форму.
Поэтому решение таково:
1. На странице прописываете невидимый ифрейм с каким-то именем.
2. В атрибуте target первой формы прописываете имя этого невидимого ифрейма.
3. На невидимый ифрейм "вешаете" функцию на событие onload. И эта функция (после окончания загрузки в ифрейм файла-action первой формы) должна будет изменить глобальную переменную-"флаг" с начального значения false на true.
4. На вторую форму (где target - это текущее окно) на событие onsubmit "вешаете" проверку "флага" на истинность: если OK, то сабмитите, если "флаг" ещё ложный - отказываете в сабмите. | |
|
|
|
|
|
|
|
для: АЯ
(19.10.2009 в 22:12)
| | В целом ясно.
Не уверен только что без ошибок смогу это написать.
Буду пробовать. | |
|
|
|
|
|
|
|
для: АЯ
(19.10.2009 в 22:12)
| | Не получается у меня по событию onload ифрейма изменить значение флага.
При исходной загрузке страницы iframe тоже ведь грузится.
Значит надо как-то отличить начальную загрузку от загрузки после сдачи формы.
В Опере ещё как-то получается. Я пишу:
<iframe onload="if(this.location.href.length>9) flag=true;" >
| А в IE это просто приводит к ошибке.
Как правильно сделать установку флага по событию загрузки iframe?.... | |
|
|
|
|
|
|
|
для: 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> (после первой "псевдозагрузки" пустой страницы). | |
|
|
|
|
|
|
|
для: АЯ
(24.10.2009 в 09:55)
| | Спасибо!
так отлично работает. | |
|
|
|
|
|
|
|
для: АЯ
(19.10.2009 в 22:12)
| | >4. На вторую форму (где target - это текущее окно) на событие onsubmit "вешаете" проверку "флага" на истинность: если OK, то сабмитите, если "флаг" ещё ложный - отказываете в сабмите.
Вот это не получается. | |
|
|
|