Rails no conoce el estado de un formulario hasta que se envía, pero puede agregar una pizca de javascript para ayudar en ese caso.
$('#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!);
}
}
});
});
edición: Bueno, por lo que sólo se ocupa de enlace de cabecera clic (como se especificó en su pregunta), he aquí una solución que utiliza onbeforeunload. fuente de la página completa, porque he comprobado para asegurarse de que te estoy dando algo para construir en:
<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>
Por supuesto, esto no es un ayudante carriles específicos, pero se podría escribir su propio ayudante de escupir una etiqueta de secuencia de comandos con algo así en sus puntos de vista. También es probable que desee colocar comprobaciones específicas del formulario en lugar de simplemente verificar cada entrada para ver si está vacía. Cada forma que alguna vez hice era un hermoso y único copo de nieve de una forma u otra.
Supongo, pero eso no usa nada en Rails. Además, eso no cuenta para hacer clic en otras cosas como botones. Estaba buscando una solución más elegante, como en el formulario de etiqueta auxiliar, para especificar que desea que Rails genere código JavaScript para evitar descargas prematuras de la página. – Amy
@Amy Rails 3 usa UJS y depende de un controlador de JavaScript [como este] (https://github.com/rails/jquery-ujs/blob/master/src/rails.js#files) para proporcionar una funcionalidad específica. Rails ya no genera ningún código JavaScript de sus ayudantes. Lo más parecido a lo que está buscando es pasar otro atributo al formulario, como '