2016-04-18 3 views
1

Мое приложение MVC5, я хочу предупредить пользователя, когда они закрывают вкладку браузера. Я нашел это решение Setting onbeforeunload on body element in Chrome and IE using jQuery, отлично работает, за исключением того, что я использую location.href в нескольких случаях (пользовательские кнопки команд внутри сетки Telerik). Пробовал следующее:onbeforeunload navigation using location.href

$(window).bind('hashchange', function() { 
       validNavigation = true; 
    }); 

Чтобы избежать запроса пользователя, если хотите покинуть эту страницу. Есть ли лучший способ предупредить пользователя перед закрытием вкладки браузера?

+0

и почему hashchange тогда? Вопрос, похоже, противоречит мне. –

+0

Возможно, haschange - это неправильный способ обнаружения изменений в расположении страницы; не мог правильно переустановить onbeforeunload, когда я использую location.href. Используемое решение: $ («a»). Bind («click», function() { validNavigation = true; }); – hncl

ответ

0

Попробуйте это;)

нужны некоторые изменения в этом коде:

window.onbeforeunload = function() { 
    if(validNavigation){ 
    validNavigation = false; 
    /* if this click is valid means user action is not close window or reload page then just return; */ 
    return; 
    } 

    /* Want to ask user before leaving the page */ 
    return "Are you sure you want to leave this page bla bla bla?"; // you can make this dynamic, ofcourse... 
}; 


validNavigation = true; 
$(document).on('click', '.validNavigation', function(){ 
    validNavigation = true; 
}); 

Теперь то, что вам нужно сделать, это добавить validNavigation класс для всех ссылок для тех, кто не хочет, чтобы показать onbeforeunload сообщение пользователю;

UPDATE В соответствии с комментарием:

function gotopage(args){ 
    /* set validNavigation to true to don't show warning on page load; */ 
    validNavigation = true; 
    window.location.href = [args]; 
} 

Для каких действий не хочет показывать предупреждение пользователю просто установить validNavigation = true; и положить заявление после того, как это может привести к изменению местоположения;

+0

Спасибо, звучит как хороший подход; однако я не мог найти, как я могу добавить класс к этому: function gotopage (args) { window.location.href = [args]; } – hncl

+0

Если вы не хотите показывать это предупреждение для пользователя, добавьте класс в 'a' ИЛИ установите' validNavigation = true; 'для какого-либо действия; – itzmukeshy7

+0

Работал отлично. Ожидайте при использовании lightgallery lightbox. Мне пришлось добавить $ ('# lightgallery'). Bind ("click", function() { validNavigation = false; }) ;. Спасибо – hncl

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