диалоговое окно с jQuery пользовательского интерфейса OnBeforeUnload


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

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

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

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

какие идеи?

6 64

6 ответов:

правильный способ отображения предупреждения-просто вернуть строку. Не называй 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

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

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

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

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

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

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

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

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

для 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>