2011-04-09 17 views

cevap

13

Yapamazsınız. Bir sayfanın yenilenmesi, DOM'u uzaklaştırmak ve boşaltmak gibidir; böylece onbeforeunload olayı her zaman çağrılır.

+0

Teşekkürler, set FLAG ile bunu gerçekleştirebilir miyiz, eğer evet, sayfanın F5 tuşuna basarak yenilendiğini nasıl anlayabilirim? – mymotherland

+0

@Dinesh, cevabımın tam noktası, bunun bir kullanıcı F5'e ve bir kullanıcıya gitmek için bir bağlantıya tıklayan bir kullanıcı arasında ayrım yapamayacağından, bunun yapılamamasıdır. –

+0

tamam Darin, Bir kez daha teşekkürler – mymotherland

4

Ne arıyorsanız, web sayfasını yenilemeyi kontrol etmenin en iyi yolu onKeyDown işleviyle olacaktır. Maalesef tarayıcıdan doğrudan yenileme düğmesine basmanız DOM'ı tekrar yükleyecektir, bu nedenle teknik olarak bu işlemin yenilenmesini önlemenin bir yolu yoktur.

Aynı konuyla ilgili olarak, tarayıcınızın klavye olaylarına verdiği yanıtı doğrulayabileceğiniz bu web sayfasını http://asquare.net/javascript/tests/KeyCode.html buldum. Burada en iyi seçeneğin onKeyDown neden olduğunu anlamaya başlayabilirsiniz. Chrome, onKeyPress işleviyle tepki vermiyor.

Sadece yenileme eylemini kontrol etmek için bir değişkene ihtiyacınız var. Kullanıcı bu tuşa basarsa, onBeforeUnload eylemi yürütülmez.

var refresh = false; //Control variable to control refresh access 
j$(window).bind('beforeunload', function(){ 
    if (refresh == false) { // If F5 is not pressed 
     return "Do you really want to leave?"; 
    } 
}); 
j$(window).keydown(function(event) { 
    if (event.keyCode == 116) { // User presses F5 to refresh 
    refresh = true; 
    } 
}); 
+0

Chrome'da benim için çalıştı. İyi kısmi çözüm. Benim durumumda –

+0

event.keyCode undefined gösteriyor. –

1

dikkat edilmesi gereken iki şey vardır. (1) "window.onbeforeunload" işlevi, f5 tuşu bırakıldığında (on tuşuyla) çalışır. Diyalog görünümünü değiştirecek herhangi bir şey, onkey öncesinde olduğu gibi gerçekleşmelidir. (2) Geri dönüşün ardından boş değer gelirse işlev çalışmaz.

Bir dönüş değeri olarak kullanılacak bir global değişken ayarlarsanız VE f5 tuşuna basılırsa null yaparsanız, f5 yenilendiğinde iletişim kutusu görünmez. Ancak "Kapat" düğmesine basılırsa görünür. "OnBeforeunload" içindeki kodun dönüş değeri sıfır olsa bile çalışacağını unutmayın, böylece kodun da devre dışı bırakılmasını istiyorsanız dönüş değerini kontrol etmelisiniz.

document.onkeydown = KeyCheck; 
window.returnMessage="You are now logged out."; 
function KeyCheck(e) { 
    var key = (window.event) ? event.keyCode : e.keyCode; 
    alert(key); 
    if(key==116) {window.returnMessage=null;} 
    } 
$(function(){ 
    window.onbeforeunload = function(event) { 
     if(window.returnMessage.length > 0) {logoutFunction();} 
     return window.returnMessage; 
     } 
    }); 
İlgili konular