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