Сообщение о покидании страницы

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Есть такой код:
Код:
var is_data_changed = false;

window.onbeforeunload = function () {
    var myMessage= "Вы действительно хотите покинуть страницу, не сохранив данные?";
   
    // Ловим событие для Interner Explorer
    var e = e || window.event;
   
     // Для Internet Explorer и Firefox
    if (e) {
                    e.returnValue = myMessage;
    }
    // Для Safari и Chrome
   
   
    return ( ( is_data_changed || tinyMCE.activeEditor.getContent() != '' ) ? "Все данные в форме будут утеряны. Закрыть страницу?" : null);
}

$(document).ready(function(){
   
   //не выводим сообщение о покидании страницы
   $('button[name="addreview"]').on('click',function(){
     is_data_changed = false;
   });
});
Есть еще функция, что если были внесены изменения на странице (в форме), то переменная is_data_changed устанавливается в true.
Но мне нужно, что бы нажатии на кнопку формы (отправить), это сообщение не выводилось. Вроде бы подписка на событие есть по клику, но она срабатывает, я так понимаю, позже, поэтому переменная не устанавливается в false (не успевает).
 
Попробуйте так:
var is_data_changed = false;
$(document).ready(function(){
//не выводим сообщение о покидании страницы
$('button[name="addreview"]').on('click',function(){
is_data_changed = false;
});

$(window).bind("beforeunload", function(e) {
var myMessage= "Вы действительно хотите покинуть страницу, не сохранив данные?";

// Ловим событие для Interner Explorer
var e = e || window.event;

// Для Internet Explorer и Firefox
if (e) {
e.returnValue = myMessage;
}
// Для Safari и Chrome


return ( ( is_data_changed || tinyMCE.activeEditor.getContent() != '' ) ? "Все данные в форме будут утеряны. Закрыть страницу?" : null);
});
});
 
может быть is_data_changed всё-таки false, а tinyMCE.activeEditor.getContent() возвращает не пустую строку, а что-то иное? || - это ведь "или".
 
Последнее редактирование:
может быть is_data_changed всё-таки true, а tinyMCE.activeEditor.getContent() возвращает не пустую строку, а что-то иное? || - это ведь "или".
Если is_data_changed = true (если менялись поля в форме) или tinyMCE.activeEditor.getContent() != '' (не пустой виз.редактор, т.е. есть текст), то, соответственно, выводим предупреждение. true Ставится в момент ввода данных в форму. А если нажать на отправку формы, ставится в false.
Но чет мне кажется, в этом направлении нужно думать... может добавить чего...

Попробуйте так:
);
Просто местами поменяли? Не помогло.
Может быть есть другой способ вывести сообщение?
 
Последнее редактирование модератором:
Если is_data_changed = true (если менялись поля в форме) или tinyMCE.activeEditor.getContent() != '' (не пустой виз.редактор, т.е. есть текст), то, соответственно, выводим предупреждение. true Ставится в момент ввода данных в форму. А если нажать на отправку формы, ставится в false.
сорри, перпутал - false конечно же. Но я про другое. Вот если добавить перед
Код:
return ( ( is_data_changed || tinyMCE.activeEditor.getContent() != '' ) ? "Все данные в форме будут утеряны. Закрыть страницу?" : null);
Вот это:
Код:
alert(is_data_changed + ' - ' + (tinyMCE.activeEditor.getContent() != ''));
Что вернет? true - false?
 
сорри, перпутал - false конечно же. Но я про другое. Вот если добавить перед
Код:
return ( ( is_data_changed || tinyMCE.activeEditor.getContent() != '' ) ? "Все данные в форме будут утеряны. Закрыть страницу?" : null);
Вот это:
Код:
alert(is_data_changed + ' - ' + (tinyMCE.activeEditor.getContent() != ''));
Что вернет? true - false?
это что такое значит, не понял?
Но выдает следующее:
Эта страница просит вас подтвердить, что вы хотите уйти — при этом введённые вами данные могут не сохраниться.
Т.е. alert не выводит
Но в консоли выводит: false-true
Я придумал так.
Код:
return ( ( is_data_changed ) ? "Все данные в форме будут утеряны. Закрыть страницу?" : null);
Только вот проблемка. Нужно сделать подписку на событие, если были введены в textarea (в виз.редактор) данные, то ставить is_data_changed = true.
Если я firebag пишу:
Код:
tinyMCE.activeEditor.on('keyup',function(){
is_data_changed = true;
})
Все ок, А вот если в файле js, то tinyMCE.activeEditor is null, т.е. виз.редактор еще не загрузился, т.к. грузится позже.
В общем, нужно как-то проверять одну переменную. И нужно ее менять после изменения textarea (в iframe виз.редактора). Как до него достучаться, через подписку на событие не знаю.

Решено :) Примерно так:
Код:
//Если уходим, проверяем, кнопка нажата или нет. Если нет, то проверяем переменную или содержание в редакторе
//не выводим сообщение о покидании страницы
    $('button[name="addreview"]').on('click',function(){
        is_data_changed = false;
                        button_action = true;
    });

if( ! button_action ){
                return ( ( is_data_changed || tinyMCE.activeEditor.getContent() != '' ) ? myMessage  : null);
            }
 
Последнее редактирование модератором:
Назад
Сверху