2012-03-27 54 views
5

Formların dinamik olarak oluşturulduğu ve kod üzerinde denetimimiz olmadığı bir kuruluş uygulamasında çalışıyorum. şeklinde kontrollerin çoğu Biz kullanıcı üst bilgi veya alt bağlantıyı kullanarak başka bir sayfaya gitmek için çalıştığında bir ok iletişim iptal sunmak istiyorum onlaraonbeforeunload - seçmeli olaylara bağlama

<select name="s_10_1_1_0" onchange = 'SWESubmitForm(document.SWEForm10_0,s_5,"","1-E0RHB7")' id='s_10_1_1_0' tabindex=1997 > 

<input type="text" name='s_10_1_11_0' value='' onchange = 'SWESubmitForm(document.SWEForm10_0,s_7,"","1-E0RHB7")' id='s_10_1_11_0' tabindex=1997 maxlength="30"> 

ilişkili kod şu var.

Onbeforeunload olayını bağlamak ve kullanıcıya bir tamam iptal iletişim kutusu sunmak için kodu takip etmeyi alışkınım.

//this identifies the unique page name 
var viewName = $('input[name="SWEView"]').val(); 
// if I am on desired page bind the event so that now dialog is presented to user 
if(viewName == "XRX eCustomer Create Service Request View"){ 
    $(window).bind('beforeunload', function(){ 
    return 'Your Inquiry has not been submitted yet.'; 
}); 
} 

Ama sorun bu iletişim her zaman kullanıcı formunda herhangi alanın değeri değişir gelmesidir (O ​​Onchange olay için SWESubmitForm kod günümüze nedeniyle olduğuna inanıyorum).

Ben kullanıcı sayfasında (penceresini kapatmadan dahil) seçici olaylara onbeforeunload kravatlı formu dışında veya başka bir deyişle herhangi bir başka bağlantıyı tıklarsa gelmek iletişim onbeforeunload istiyorum.

cevap

6

.onbeforeunload() küresel Yardım edin. Sayfayı yalnızca bir şekilde bırakmanın bir yolu olamaz. Olay işleyicisi yüklüyse, görüntüleyicinin sayfayı nasıl terk ettiği önemli değil, tetiklenir.

Kendi iç durumunuzu takip edebilir ve onbeforeunload() işleyicisindeki herhangi bir şeyi isteyip istemediğinize karar verebilir ya da hiçbir şey döndürmeyebilirsiniz (bu nedenle uyarı istenmez). Bu gibi

bu cevap artık işe yaradığını kayda değer olurdu google çok görüntülenir alma konusunda oldukça yüksektir

//this identifies the unique page name 
var viewName = $('input[name="SWEView"]').val(); 
// if I am on desired page bind the event so that now dialog is presented to user 
if(viewName == "XRX eCustomer Create Service Request View"){ 
    $(window).bind('beforeunload', function() { 
     // figure out whether you need to prompt or not 
     if (myStateSaysToPrompt) { 
      return 'Your Inquiry has not been submitted yet.'; 
     } else { 
      return; // no prompt 
     } 
    }); 
} 

Güncelleme:

Yani, böyle bir kod olabilir.

Bağlı olan olayda artık 'açık' bulunmadığını unutmayın. JQuery'nin sonraki sürümlerinde önceki onbeforeunload'un kullanılması hiçbir şeyin olmamasına neden olur.

İlgili konular