2012-12-30 32 views
6

ajax ile birlikte gönderilen ve kullanıcı tarayıcıyı kapatmaya çalıştıklarında textarea göndermediklerini bildiren onbeforeunload kullanan bir textaream var. Sorun, bir saatten önce, ajax gönderimindeki başarıdan önce, kullanıcının bu formu başarılı bir şekilde göndermiş olduğunu bilmesi için göndermem gerekir. Bir NetTimeout veya clearInterval'a benzer bir kod satırıyla önceden yüklemeyi temizlemenin bir yolu var mı? Şu anda sahip olduğum onceforeunload kodunu göstereceğim, ancak b/c'nin çok önemli olduğunu düşünmüyorum. Bunu temizlemek için farklı bir işlev arıyorum. Çerçeve yok lütfen. Teşekkür ederim.Temizle OnBeforeunload

Fonksiyon çağrısı

unsavedChangesWarning(); 

onbeforeunload Fonksiyon silecektir

function unsavedChangesWarning(){ 
    window.onbeforeunload = function(){ 
     return 'If you close this page you will lose your stride update!'; 
    }; 
} 

cevap

13

window.onbeforeunload = null. Sadece kullanıcıyı herhangi bir yere yönlendirmeye çalışmadan önce bunu ekleyin.

$(window).on('beforeunload', function (e) 
{ 
    return 'Please dont leave me'; 
}); 

$(window).off('beforeunload'); 

Aslında kullanıcı oturumu sona erdi eğer temiz bir yenileme izin vermek için yukarıdaki çözümünü kullanıyor olacak:

+0

gracias! Bu yaptı! – gmustudent

1

jQuery için bu gibi görünüyor. Ancak kullanım durumunuz için, boşaltma işleminden önce basitçe koşullu hale getirmenin daha mantıklı olduğunu düşünüyorum.

$('input, textarea, select').change(function() 
{ 
    $(this).parents('form').addClass('dirty'); 
}); 
window.onbeforeunload = function() 
{ 
    if ($('form.dirty').length) 
    { 
    var confirmationMessage = 'You have edited but not saved a form on this page.'; 

    (e || window.event).returnValue = confirmationMessage; //Gecko + IE 
    return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc. 
    } 
};