2011-02-23 86 views

cevap

1

Raylar, gönderilinceye kadar formun durumunu bilmiyor, ancak bu durumda yardımcı olması için bir tutam javascript ekleyebilirsiniz.

$('#header > a').click(function(){ 
    $('input').each(function(i){ 
    if ($(this).attr(value) != '') { 
     if (confirm('are you sure you want to leave this form unfinished?') != 'true) { 
     alert('quitter!); 
     } 
    } 
    }); 
}); 

düzenleme: (Sorunuza belirtilen gibi) yalnızca başlık bağlantı tıklayarak işleme alacağı şekilde Tamam, burada onbeforeunload kullanan bir çözümdür. Tam sayfa kaynak Sana bir şey kurmak konusunda veriyorum emin olmak için test ettik çünkü: Elbette

<html> 
    <head> 
    <title>Foo</title> 
    <script> 
     window.onbeforeunload = function(){ 
     var inputs = document.getElementsByTagName('input'); 
     var unfinished = 'false'; 
     for (var i=0; i<inputs.length; ++i) { 
      if (inputs[i].value != '') { 
      unfinished = 'true'; 
      } 
     } 
     if (unfinished == 'true') { 
      return 'Are you sure you want to leave?'; 
     } 
     } 
    </script> 
    </head> 
    <body> 
    <form> 
     <input name='foo'/> 
     <input type='submit'/> 
    </form> 
    <a href='/'>Leave</a> 
    </body> 
</html> 

bu Rails özgü yardımcı değil, ancak tükürmek için kendi yardımcı yazabilirsiniz İçinde bunun gibi bir şeye sahip bir komut dosyası etiketi. Muhtemelen, her bir girdiyi boşalmak için kontrol etmek yerine, formlara özgü kontroller koymak isteyeceksiniz. Yaptığım her form, bir şekilde veya başka bir şekilde güzel ve eşsiz bir kar tanesiydi.

+0

Sanırım, ama bu Raylarda hiçbir şey kullanmıyor. Ayrıca bu, düğmeler gibi diğer şeyleri tıklamaktan sorumlu değildir. Form sayfası yardımcısında, Rails'in eski sayfa yüklemelerini önlemek için bazı JavaScript kodları oluşturmasını istediğinizi belirterek daha zarif bir çözüm arıyordum. – Amy

+0

@Amy Rails 3, UJS'yi kullanır ve belirli bir işlevsellik sağlamak için bir JavaScript sürücüsüne bağlıdır (https://github.com/rails/jquery-ujs/blob/master/src/rails.js#files). Raylar artık yardımcılarından herhangi bir JavaScript kodu oluşturmaz. Aradığınız şeye en yakın şey, formdaki başka bir öznitelikten geçmektır, örneğin

've bu öznitelik kümesine sahip formları bulmak için bazı JavaScript'leri kullanın ve sonra kullanın Unixmonkey'in çözümü. –