2015-09-30 2 views
0

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

Я смотрел на этот пост, который один из плакатов упомянутых с помощью этого события, чтобы обнаружить изменения страницы Best way to detect when a user leaves a web page?

<script type="text/javascript"> 

$(document).ready(function() { 

    window.onbeforeunload = SaveDashboard; 


}); 

function SaveDashboard(){ 
    var gridArray = _.map($('.grid-stack .grid-stack-item:visible'), function (el) { 
     el = $(el); 
     var gridID = el.find('.grid-stack-item-content.ui-draggable-handle').first().attr('id'); 
     var node = el.data('_gridstack_node'); 
     return { 
      id: gridID, 
      x: node.x, 
      y: node.y, 
      width: node.width, 
      height: node.height 
     }; 
    }); 

    $.ajax({ 
     url: 'Dashboard/EditWidgets/', 
     type: 'PUT', 
     data: { 
      widget: gridArray 
     }, 
     success: function (dataset) { 
     }, 
     failure: function (xhr, error) { 
      console.log(xhr) 
      console.log(error) 
     }, 
    }); 
} 
</script> 
+0

["* Это событие срабатывает, когда окно собирается выгрузить свои ресурсы. Документ по-прежнему отображается, и событие все еще отменяется. *"] (Https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload) Таким образом, он срабатывает, когда вы закрываете окно, если вы все еще просматриваете страницу. Он не должен срабатывать, если вы просматриваете другую страницу, когда она закрывается. –

+1

Это один из обработчиков событий, которые я бы ** не ** объявлял внутри 'document.ready()', так как вы хотите как можно скорее прикрепить его к окну. – dave

+1

Обратите внимание, что приглашение не будет отображаться, если вы не вернете значение non-void (non-null/undefined). Функция SaveDashboard ничего не возвращает, хотя точка останова должна быть удалена в любом случае –

ответ

0

вы должны вернуть строку в onbeforeunload обработчика. если вы ничего не вернете, событие не будет запускать ваш обработчик. текст, который вы должны вернуть, - это текст, который будет помещен в приглашение, которое откроет браузер, если пользователь действительно захочет покинуть страницу.