Подтвердить что ты не робот

JQuery UI Dialog OnBeforeUnload

У меня небольшая проблема. Я пытаюсь поймать событие OnUnLoad окна и задать вопрос о подтверждении, и если пользователь решит, что они хотят остаться в порядке, и если они захотят покинуть страницу, они потеряют все несохраненные данные. Здесь проблемы...

Я использую JQuery UI Dialog, и когда я помещаю следующий код на свою страницу, у меня открыт диалог, и когда я нажимаю кнопку "Назад" в браузере, он никогда не выталкивает msgbox. Он просто обновляет страницу:

<script type="text/javascript"> 
    $(window).bind('beforeunload', function() { 
            alert('you are an idiot!'); 
        } 
    );
</script>

И решение, которое я использую, было опубликовано здесь . Опять же, msgbox будет отображаться отлично, если у меня нет открытого диалогового окна jQuery. Если да, то он не отображает msgbox и просто обновляет страницу.

Любые идеи?

4b9b3361

Ответ 1

Правильный способ отображения предупреждения - просто вернуть строку. Не вызывайте метод alert() самостоятельно.

<script type="text/javascript">
    $(window).on('beforeunload', function() {
        if (iWantTo) {
            return 'you are an idiot!';
        }
    }); 
</script>

Смотрите также: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

Ответ 2

Вы также можете сделать исключение для выхода из страницы путем отправки определенной формы:

$(window).bind('beforeunload', function(){
    return "Do you really want to leave now?";
});

$("#form_id").submit(function(){
    $(window).unbind("beforeunload");
});

Ответ 3

это работает для меня

$(window).bind('beforeunload', function() {
      return 'Do you really want to leave?' ;
});

Ответ 4

jQuery API специально говорит, что он не привязан к beforeunload, а вместо этого должен привязываться непосредственно к окну. Вперед, я просто столкнулся с довольно плохой памятью из-за привязки к beforeunload с помощью jQuery.

Ответ 5

Это работает для меня:

window.addEventListener("beforeunload", function(event) {
  event.returnValue = "You may have unsaved Data";
});

Ответ 6

Для ASP.NET MVC, если вы хотите сделать исключение для выхода из страницы посредством отправки определенной формы:

Задайте идентификатор формы:

@using (Html.BeginForm("Create", "MgtJob", FormMethod.Post, new { id = "createjob" }))
{
  // Your code
}



<script type="text/javascript">

  // Without submit form
   $(window).bind('beforeunload', function () {
        if ($('input').val() !== '') {
            return "It looks like you have input you haven't submitted."
        }
    });

    // this will call before submit; and it will unbind beforeunload
    $(function () {
        $("#createjob").submit(function (event) {
            $(window).unbind("beforeunload");
        });
    });

</script>