2012-02-21 2 views
12

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

Страница имеет следующий код:

<script type="text/javascript"> 

     $(window).unload(function() { 
      alert("Handler for .unload() was called."); 
     }); 

    </script> 

Когда я уйду со страницы, я никогда не видел ожидаемый сигнала.

+1

Вы пытались в других браузерах? В каких браузерах вы попробовали? Документация на сайте jQuery понятна тем, что это событие довольно неустойчиво. – anddoutoi

+1

Выгрузка устарела и удалена, проверьте это: https://api.jquery.com/unload/ –

ответ

25

На самом деле некоторые браузеры, такие как Google Chrome, могут блокироваться, если вы попытаетесь сделать alert в окне unload. Как пользователь мне нравится эта функция. Alerting каждый раз при попытке перейти от страницы отстой:

enter image description here

Заменить предупреждение с console.log или что-то еще менее навязчивым для пользователя и событие будет счастливо называется.

Возможно, вы также захотите проверить событие onbeforeunload.

+0

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

+0

@Darin Dimitrov: замена оповещения консолью.log не даст вам много полезного эффекта, поскольку консоль (по крайней мере, в Chrome) очищается сразу после обновления страницы или перехода к другой.Вы можете видеть следы ваших сообщений, написанных для консоли на несколько миллисекунд, прежде чем они действительно исчезнут, поэтому я предпочел бы найти это бесполезным. Отключение предупреждения при разгрузке - не лучшая идея. Трудно сделать некоторые серьезные тесты, а «ужасные» страницы могут легко упростить, показывая собственное «раздражающее» сообщение, не используя alert (jQuery UI, некоторые div и т. Д.). – trejder

+7

@trejder Если вы щелкните правой кнопкой мыши на консоли в хроме, есть возможность сохранить журнал при навигации – Luke

0
window.onbeforeunload=navigationError; 

var dont_confirm_leave = 0; var leave_message = 'You sure you want to leave?'; 

function navigationError(e) 
    { 
    if(dont_confirm_leave!==1) 
    { 
     if(!e) e = window.event; 
     //e.cancelBubble is supported by IE - this will kill the bubbling process. 
     e.cancelBubble = true; 
     e.returnValue = leave_message; 
     //e.stopPropagation works in Firefox. 
     if (e.stopPropagation) 
     { 
     e.stopPropagation(); 
     e.preventDefault(); 
     } 

     //return works for Chrome and Safari 
     return leave_message; 
    } 
    } 
10

jquery .on ('unload', ..); не была надежной работой для меня. я переключился на использование beforeunload. просто убедитесь, что вы ничего не возвращаете, или пользователь получит «вы уверены, что оставите страницу» -popup.

<script type='text/javascript'> 
    $(window).on('beforeunload', function(){ 
     console.log("beforeUnload event!"); 
    }); 
</script> 
+0

Хотя, ответ Дарина правильный, пользователь должен действительно ссылаться на этот ответ. Использование «onbeforeunload» не только позволяет запускать предупреждения, но также рекомендуется и надежно, в отличие от выгрузки, что, по крайней мере, для Chrome, довольно плохое. –

5

, как bhelm сказал beforeunload работает для меня.
возвращение ложна на это событие будет вызывать браузер по умолчанию

Вы уверены, что хотите покинуть эту страницу?


$(window).on('beforeunload', function() 
    { 
     return false; 
    }); 
0

, если вы хотите, чтобы предупредить пользователя, что вы уходящую эту страницу, то если это

/* $(window).unload(function() 
 
{ 
 
\t //alert("you leaving this page"); 
 
\t console.log("you leaving this page"); 
 
}); */

функция не работает для вас, а затем заменить код с включенной функцией (beforeunload), функцией)

$(window).on("beforeunload", function() 
 
{ 
 
\t alert("you leaving this page"); 
 
\t console.log("you leaving this page"); 
 
});

эта работа для меня! вы можете увидеть вывод в консольном журнале you leaving this page

Смежные вопросы