Я хочу вызвать функцию при выгрузке окна - PullRequest
2 голосов
/ 14 сентября 2011

Я пытаюсь отобразить окно подтверждения, используя window.confirm при событии выгрузки окна,

и если пользователь нажимает кнопку ОК в окне подтверждения, я хочу вызвать одну функцию, а если пользователь нажимает кнопку ОТМЕНА, окно должно быть закрыто.

Мой код:

<script>
        function confirmit(){
                var result=window.confirm("Are you sure?");
                if(result) {
                    // close all child windows
                } else{
                    // window should not get close
                }
            }
</script>
<body onunload='confirmit();' >

Но проблема в том, что если я нажму кнопку ОТМЕНА, окно закроется.

Пожалуйста, помогите мне.

Спасибо

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Вы не можете предотвратить выгрузку, чтобы остановить выгрузку страницы.Вместо этого вам необходимо выполнить привязку к onbeforeunload.Вам просто нужно вернуть строку, которую вы хотите отобразить, пользователю из обработчика событий (обратите внимание, что в некоторых браузерах строка может не отображаться)

<script type="text/javascript">
    window.onbeforeunload = function(e){
        var msg = 'Are you sure?';
        e = e || window.event;

        if(e)
            e.returnValue = msg;

        return msg;
    }
</script>

Более подробная информация здесь

Пример JSFiddle здесь

2 голосов
/ 14 сентября 2011

измените свой код на этот, чтобы он работал в кросс-браузерном режиме:

<script>
  window.onbeforeunload = function (e) {
    e = e || window.event;

    // For IE and Firefox prior to version 4
    if (e) {
      e.returnValue = 'Do you really want to exit?';
    }

    // For Safari
    return 'Do you really want to exit?';
  };
</script>
<body>
...

обратите внимание, что используется событие onbeforeunload ( дополнительная информация / посмотреть пример ), где возвращаемое значение должно быть сообщением, которое должно быть показано пользователю.

Я не знаю, будет ли у вас шанс отреагировать наподтверждение сделать что-то после этого (например, закрытие дочерних окон), но я так не думаю.

...