2012-07-02 2 views
2

Я использую функцию javascript window.onbeforeunload, чтобы показывать предупреждение пользователю, когда пользователь пытается покинуть страницу, не отправляя данные. Эта функциональность работает нормально.window.onbeforeunload in javascript

Проблема приходит в IE (только), где пожары window.onbeforeunload события даже по щелчку внутренних ссылок, как

<a class="editlink" onclick="fnEditLink(this);" href="javascript:void(0);" > <img src="/images/newstyle/pencil.png" alt="edit" /> Edit </a> 

Это внутренняя связь, которая используется для редактирования сетки строки без внесения какого-либо перенаправления или Ajax вызов. Простое простое редактирование только что созданной строки в структуре html DOM.

Это Java-код, который я использовал на странице:

<script> 
var is_clicked = false; 
$(document).ready(function(){ 
    $('#get-a-quote-step2').submit(function(){ 
     is_clicked = true; 
     return validate('get-a-quote-step2'); 
    }); 
    $('#skip_step, form input').click(function(){is_clicked = true;}); 
}); 

window.onbeforeunload = function() { 

    if(!is_clicked) 
     return false; 
} 
is_clicked = false; 
<script> 

Все работает отлично на светлячок но IE это создает проблемы. Я использую IE 8 для тестирования этого материала, но я думаю, проблема связана со всеми версиями IE.

В моем вышеприведенном коде проблема заключается в том, что если я нажму на внутреннюю ссылку, она установит флаг is_clicked в значение true, а затем, если я нажму кнопку обновления, я смогу перезагрузить страницу, не спрашивая пользователя, что он оставляет, он потеряет все несохраненные данные.

Я думал о том, что есть в любом случае esp; в JQuery, чтобы мы знали, что некоторые ссылки не нажимаются на какую-то вещь, например isNotClicked()? Или, если есть какое-то другое решение моей проблемы, это очень приветствуется.

ответ

1

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

<a href="http://google.com">Call unload first and load a page</a> 
<a href="javascript:void(0);" id="request">Do an ajax request</a> 
<script> 
$(document).ready(function(){ 
    $('#request').click(function(e){ 
     //do some stuff 
     //returning false wil prevent the onbeforeunload event from firing 
     //but also will not redirect if the link has an href 
     return false; 
    }); 
}); 
window.onbeforeunload = function(e){ 
     return 'Want to leave?'; 
} 

</script> 
Смежные вопросы