2013-05-01 19 views
33

Aşağıdaki kod, sayfadaki verileri değiştirir ve ardından sayfadan ayrılırsanız bir uyarı verir. Bunu istiyorum - kullanıcı kayıt düğmesine bastığında hariç.jquery, kaydetme düğmesine tıklamadan sayfadan ayrılırsa uyarı verir

$(document).ready(function() { 
    formmodified=0; 
    $('form *').change(function(){ 
     formmodified=1; 
    }); 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (formmodified == 1) { 
      return "New information not saved. Do you wish to leave the page?"; 
     } 
    } 
}); 

Bu verileri kaydeder düğme:

Bu jquery kodudur

<input class="btn-primary" name="commit" type="submit" value="Save Material"> 

GÜNCELLEME Teşekkür tymeJV !!!!!!! durumda birisi olarak

başka ihtiyaç, bu çalışır:

$(document).ready(function() { 
    formmodified=0; 
    $('form *').change(function(){ 
     formmodified=1; 
    }); 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (formmodified == 1) { 
      return "New information not saved. Do you wish to leave the page?"; 
     } 
    } 
    $("input[name='commit']").click(function() { 
     formmodified = 0; 
    }); 
}); 
+2

? Ve geçmedi mi? Eğer öyleyse, o zaman sadece Kaydet düğmesine 0 ya da formun inşasına ayarlayın. – MasNotsram

+0

Anladığımdan emin değilim, kaydetme düğmesine tıkladığınızda bilgilerin kaydedilmeyeceğine dair bir uyarı ister misiniz? –

+0

@ColinBacon İstediğine inanıyorum ki, eğer kaydet düğmesini tıklarsa, kaydetme hakkında uyarıyı gösterme. – tymeJV

cevap

19

sizin tasarruf düğmesi bilgileri göz önüne alındığında: Sen formmodified

$("input[name='commit']").click(function() { 
    formmodified = 0; 
}); 

Sizin onay değerini ayarlayabilirsiniz

<input class="btn-primary" name="commit" type="submit" value="Save Material"> 

sonunda tetiklenmemelidir şimdi

+0

Yardım için teşekkürler! – Reddirt

+0

Bir çekicilik gibi çalışır. Ve aslında son satırına ihtiyacımız yok "Sayfayı bırakmak istediğinizden emin misiniz?" bu, tarayıcının (en azından Chrome) onaylama isteminin bir parçası gibi görünüyor. – cbmtrx

+0

Hmm, belki çok erken konuştum @tymeJV. Görünüşe göre - Chrome'da, en azından - "window.onbeforeunload", "input.commit" düğmesinin tıklaması kaydedilmeden önce "confirmExit()" işlevini çağırır. Bu yüzden form gönderiminde bile uyarıyı çıkarır. – cbmtrx

6
$('#form').data('serialize',$('#form').serialize()); // On load save form current state 

$(window).bind('beforeunload', function(e){ 
    if($('#form').serialize()!=$('#form').data('serialize'))return true; 
    else e=null; // i.e; if form state change show box not. 
}); 

Google JQuery Form Serileştirme işlevini kullanabilirsiniz; bu, tüm form girişlerini toplar ve dizide saklar. Bu açıklamanın yeterli olduğunu tahmin ediyorum :)

+0

Çözümün bazı açıklamaları yardımcı olabilir ve artı bundan daha fazla kazanabilirsiniz. – suspectus

+0

tamam, öneriniz için teşekkürler, yaptım. –

3

Yukarıdaki sorunun tam bir cevabı değil, soruna bir çözüm arayanlar için 'referanslar, kaydedilmemiş form değişiklikleri hakkında kullanıcıları uyarıyorum' gibi oldu. d jQuery eklentisi AreYouSure'u tavsiye etmeyi sever. Bu çok hafif eklenti, form değiştirilen form değişiklikleri ekleme/kaldırma, form değiştirilmiş form değişiklikleri gibi geri dönüşü olmayan form değişiklikleri gibi tüm fındık ve cıvataları ele alır.

0

bir bağlantı tıklandığında bırakarak sayfanın engellemek istiyorsanız, beforeunload olayına bağlamak ve e geçirebilirsiniz: sadece sayfanın süresince kullanılan 'formmodified' mı

$(document).ready(function() { 
    var modified = false; 
    $(window).bind('beforeunload', function(e){ 
     if (modified) { 
      $.confirm({ 
       'title' : 'Did You Save Your Changes?', 
       'message' : 'It seems as if you have made changes but didn\'t click Save.\nAre you sure you want to leave the page?', 
       'buttons' : { 
        'OK' : { 
         'class' : 'gray', 
         'action': function(){} // Nothing to do in this case. This can be omitted if you prefer. 
        } 
       }) 
      } 
      e.preventDefault(); 
     } 
    }); 
});  
+0

Doest benim için çalışmıyor: herhangi bir linke tıklamak veya tarayıcıya yeniden yüklemek sadece sayfayı açmak/yeniden yüklemek. – Fabien

+1

https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload: "25 Mayıs 2011'den beri, HTML5 belirtimi window.alert(), window.confirm () ve window.prompt() yöntemleri bu olay sırasında göz ardı edilebilir. Daha fazla ayrıntı için HTML5 belirtimine bakın. " – dieend

İlgili konular