Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отправка данных формы перед закрытием документа (https://javascript.ru/forum/events/47581-otpravka-dannykh-formy-pered-zakrytiem-dokumenta.html)

HarleyDavidson 29.05.2014 14:10

Отправка данных формы перед закрытием документа
 
Доброго всем дня! Господа гуру, выручайте плиз:
Имеется html с iframe вида:
<iframe id="ifrm" src="empty.php" width="100%" height="100%-150px" style="border:0; position:absolute;" frameborder="0"></iframe>

по нажатию кнопок яваскриптом меняется src - грузятся в фрейм разные html-ки с формами вида
<form name="main" action="1chs_srv.php" method="post">
.
Как мне сделать чтобы перед сменой html-ки (при нажатии кнопки в паренте) текущая форма отправила данные (сделала submit). Следующие конструкции не работают:
function save_data()
{
	document.main.submit();
}


1.
window.onunload=save_data;
- не работает
2.
<body style="width: 99%; onunload="save_data();" >
-не работает
3.
window.onclose=save_data;
- не работает

Подскажите на какое событие вешать - отправка должна быть именно перед сменой атрибута src у iframe - там не только кнопки но и други события меняют этот атрибут.
ЗЫ: Заранее благодарен тем кто не прошел мимо :)

krasovsky 29.05.2014 14:33

window.frames[0].document.getElemetById('ifrm').submit()

HarleyDavidson 29.05.2014 14:54

Спасибо за внимание, но наверно я не совсем доходчиво объяснил:
отслеживать все места где меняется src слишком муторно, идея была поймать событие когда html выгружается из фрейма, вопрос стоял не как сабмитить, а на какое событие повесить этот сабмит, причем контролировать это нужно из html-ки которая находится в фрейме, а не из парентной, в которой находится сам фрейм.

submit у iframe`а?

krasovsky 30.05.2014 08:16

Попробуй onbeforeunload или onpopstate для отслеживания изменения урла, и мне кажется тебе придется отправлять форму твою ajax'ом, и в коллбеке (success или complete) перезагружать страницу

cyber 31.05.2014 11:12

HarleyDavidson,
http://learn.javascript.ru/onload-on...onbeforeunload

HarleyDavidson 02.06.2014 10:51

cyber, спасибо, я эту статью уже почти наизусть выучил :) . Ситуация следующая:

конструкция 1:
<body onbeforeunload="document.main.submit();return alert('Данные сохранены. Точно перейти?');">

IE 9 - форма сабмитится, алерт выдает, скрипт которому передано управление выполняется дальше.
FF 29 - форма сабмитится, алерт выдает, скрипт которому передано управление вылетает.
GC 34 - ноль эмоций - вообще не реагирует
Opera - принципиально не поддерживает событие onbeforeunload
конструкция 2:
function setHandler() {
	window.onbeforeunload = function() {
		document.main.submit();
		return "Данные сохранены. Точно перейти?";
	};
}
setHandler();

эксплорер и файерфокс ведут себя также, а вот хром, алерт выдает, скрипт дальше выполняет, а данные не сохраняются (не происходит сабмита однако).
Задача остается нерешенной - Как автоматом сохранить данные формы при попытке пользователя свалить со страницы или закрыть браузер (алерт в принципе не нужен - я его для наглядности воткнул). Желательно конечно кроссбраузерное решение (ну оперу фиг с ней можно выкинуть). Помогите плиз - уже 5 дней башку ломаю.

cyber 02.06.2014 14:16

HarleyDavidson, а не проще ли сделать кнопку "отправить" что бы юзер сам отправлял форму?
Это самое кроссбраузерное и простое решение.

Aetae 02.06.2014 14:31

Ну попробуй вручную ajax'ом данные передать...

HarleyDavidson 04.06.2014 15:14

Цитата:

Сообщение от cyber
а не проще ли сделать кнопку "отправить" что бы юзер сам отправлял форму?

Нет, не проще
Цитата:

Сообщение от Aetae
Ну попробуй вручную ajax'ом данные передать...

16 форм, от 12 до 47 полей ввода в каждой - в писателя перевоплощаться? опять же - ajax-запрос на какое событие вешать?

Aetae 04.06.2014 19:28

Цитата:

Сообщение от HarleyDavidson (Сообщение 314787)
16 форм, от 12 до 47 полей ввода в каждой - в писателя перевоплощаться? опять же - ajax-запрос на какое событие вешать?

Ну а что ты хочешь то от нас? Нет панацеи.
Вот тут максимально подробно разобрали вопрос.


На какое событие? На все подряд.
N форм? Гугли готовые решения для ajax отправки, и всё сведётся к вызову одной функции.


Часовой пояс GMT +3, время: 11:14.