Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OnUnload, валидация формы, остановка перехода, предупреждение пользователя 
V
    Опции темы
Rivelt_Silverbeast
Дата 7.3.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 4.2.2007

Репутация: нет
Всего: 1



Имеется следующий код:

Код

<body onunload="
 forms = document.forms;
 unclose = 0;
 for(i=0;i<forms.length;i++)
 {
  if(forms[i].body!=null)if(forms[i].body.value!='')unclose++;
 }
 if(unclose)return confirm('На странице имеется полей с вводимым текстом: '+unclose+'.'+
'\nВы действительно хотите уйти со страницы, не отправив текст?');
 ">


Также на странице есть набор однотипных форм, имеющих textarea. При наличии хотя бы одного заполненного (и не отправленного) textarea хотелось бы предупреждать пользователя перед уходом по ссылке или перезагрузке страницы.
Проблема в том, что пока выполняемый код действует издевательски: проверки выполняются, confirm вызывается, пользователь уведомлён о наличии полей ввода с текстом, но браузер бодро уходит.

Что здесь можно сделать?
PM MAIL WWW   Вверх
ksnk
Дата 7.3.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



потомучто метод называется onbeforeunload и работать с ним нужно несколько по другому...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Kefir
Дата 7.3.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



Код

<body onbeforeunload="return 'Уже уходите?';">


Добавлено через 1 минуту и 56 секунд
смысл такой, что будет показано окошечко самого браузера, где будет текст о том, что ты, мол уходишь со страницы, а также будет вписан текст который ты вернёшь в onbeforeunload (в моём примере - 'Уже уходите?').
PM MAIL WWW Skype   Вверх
Rivelt_Silverbeast
Дата 7.3.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 4.2.2007

Репутация: нет
Всего: 1



О, спасибо. Примерно то, что искал.

В итоге получаем:
Код

...
<body onbeforeunload="
 forms = document.forms;
 unclose = 0;
 for(i=0;i<forms.length;i++)
 {
  if(forms[i].body!=null)if(forms[i].body.value!='')unclose++;
 }
 if(unclose)return 'На странице имеется полей с вводимым текстом: '+unclose+'.'+
'\nВы действительно хотите уйти со страницы, не отправив текст?';
 ">
...

PM MAIL WWW   Вверх
Rivelt_Silverbeast
Дата 7.3.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 4.2.2007

Репутация: нет
Всего: 1



P.S.
Валидатор ругается на атрибут onbeforeunload, как ни странно.
PM MAIL WWW   Вверх
Kefir
Дата 7.3.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



дело в том, что оно не входит в стандарт  smile , хотя IE, FF и Safari его поддерживают (насколько я помню). Проблемная тема - Опера  smile , как всегда выделилась и не поддерживает эту фичу (хотя гугль-мэйл как-то справляется В))

Добавлено через 14 минут и 9 секунд
ан нет, вру - даже гмейл не смог сделать эту тему в опере В)

Это сообщение отредактировал(а) Kefir - 7.3.2008, 16:53
PM MAIL WWW Skype   Вверх
Rivelt_Silverbeast
Дата 7.3.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 4.2.2007

Репутация: нет
Всего: 1



Поэтому единственный известный мне способ скормить валидатору страничку с этим решением — перевести полностью в javascript. smile

Код

function f()
 {
 forms = document.forms;
 unclose = 0;
 for(i=0;i<forms.length;i++)
 {
  //if(((forms[i].message!=null)&(forms[i].message.value!=''))|(forms[i].body))unclose++;
  if(forms[i].message!=null)if(forms[i].message.value!='')unclose++;
  if(forms[i].body!=null)if(forms[i].body.value!='')unclose++;
 }
 if(unclose)return 'На странице имеется полей с вводимым текстом: '+unclose+'.'+
'\nВы действительно хотите уйти со страницы, не отправив текст?';
 }
 
window.onbeforeunload=function()
{
return f();
}


Но это не совсем честно, imho. smile
PM MAIL WWW   Вверх
Sardar
Дата 7.3.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Rivelt_Silverbeast @  7.3.2008,  16:54 Найти цитируемый пост)
Поэтому единственный известный мне способ скормить валидатору страничку с этим решением — перевести полностью в javascript.

Можно забить, ведь знаешь что атрибут правильный. Можешь расширить своим DTD, тогда по идее валидатор должен это дело проглотить (но сам валидатор может не соответствовать спецификациям  smile )


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Kefir
Дата 8.3.2008, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



Rivelt_Silverbeast, ну, насколько я помню, аякс тоже изначально не был валидным, его в стандарт ввели задним числом, когда он уже какое-то время просуществовал. а onbeforeupload по любому рано или поздно в стандарт войдёт. вопрос времени В)
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0907 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.