Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Предотвращение ухода со страницы (https://javascript.ru/forum/events/15779-predotvrashhenie-ukhoda-so-stranicy.html)

ntro123 12.03.2011 20:45

Предотвращение ухода со страницы
 
Добрый вечер, есть скрипт который отправляет данные на сервер через ajax, перед отправкой out=1; и если во время отправки человек уходит то ему выдается confirm и если он ==1 то человек уходит если нет то остается на странице и ждет пока скрипт не отправит все данные на сервер.

Делаю через jquery

$(window).unload(function(e){
 if(out && !confirm('Хотите уйти со страницы?')) e.preventDefault();
});


но preventDefault не работает.

Как быть? как по другому предотвратить уход?

ПС. не предлагать перехват клика по ссылкам.

Заранее спасибо!

dmitriymar 12.03.2011 20:53

ntro123,
ну и зачем пользователю навязывать остаться? показать что уходить не стоит-достаточно добавить элемент показывающий что идёт обработка-захочет дождаться-дождётся-а не хочет-зачем пытаться удержать?-после этого второй раз он не зайдёт-бесит это однако

Aetae 12.03.2011 20:54

Лол. А не хотите способ заставить человека перевести все деньги на вашь счёт, отформатировать диск С: и застрелиться?

ntro123 12.03.2011 21:17

Там работаю серьёзные скрипты и могут работать очень долго и скажем спустя часа, после работы, пользователь может уже и немного подзабыть и нажать ctrl + TAB и потом ctr + W и сбросится скрипт, т.е. случайных сценариев сброса может быть очень много и я думаю что лучше чтобы меня тролили те люди которые ненавидят такие ф-ции, чем те люди которые буду пользоваться программой случайно сбросят и потом им надо будет начинать все с начала... это не есть навязывание остаться это предупреждение что мол данные не буду сохранены и стоит ли при таком развитии сценария юзеру покидать страницу.

Есть ajax gif <-- но это может не спасти см. выше.

Aetae, а не хотите постить по теме, а не тролить?

dmitriymar 12.03.2011 21:37

Цитата:

Сообщение от ntro123
Там работаю серьёзные скрипты и могут работать очень долго и скажем спустя часа, после работы, пользователь может уже и немного подзабыть и нажать ctrl + TAB и потом ctr + W и сбросится скрипт, т.е. случайных сценариев сброса может быть очень много и я думаю что лучше чтобы меня тролили те люди которые ненавидят такие ф-ции, чем те люди которые буду пользоваться программой случайно сбросят и потом им надо будет начинать все с начала... это не есть навязывание остаться это предупреждение что мол данные не буду сохранены и стоит ли при таком развитии сценария юзеру покидать страницу.

ну я думаю что вам всерьёз нужно задуматься об архитектуре вашего сайта-чтобы человек мог выйти и потом при заходе получить эти данные. да и об использовании комет стоит задуматься-чтоб человек видел в какой стадии сейчас находится задача-чтобы не подумал что зависло.

Aetae 12.03.2011 21:43

0_о? Делать клиенте часовые операции - это маразм. А если они на стороне сервера - нормальные люди это решают сессиями.

ntro123 12.03.2011 21:59

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


так что
Цитата:

ну я думаю что вам всерьёз нужно задуматься об архитектуре вашего сайта-чтобы человек мог выйти и потом при заходе получить эти данные.
не в тему.

Причем здесь это
Цитата:

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

Даже предположим если в топике я бы написал
Цитата:

Добрый день.
$(window).unload(function(e){ 
 if(out && !confirm('Хотите уйти со страницы?')) e.preventDefault(); 
});


Не работает код, как быть?

Заранее спасибо.
Вы бы все равно кроме тролинга ничего бы полезного не написали?

Kolyaj 12.03.2011 22:11

beforeunload, как минимум.

ntro123 12.03.2011 22:20

$(window).beforeunload(function(){
		alert("Bye now!"); 
		});


Не работает, что делать?

Kolyaj 12.03.2011 22:20

Выкинуть jQuery.


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