是否存在Rails帮助程序或Rails方法,如果用户在当前页面的表单中键入内容,则会阻止用户离开当前页面?
如果他们在表单中有未保存的更改时点击标题链接,我会尝试阻止他们丢失数据。
答案 0 :(得分:1)
Rails在提交之前不知道表单的状态,但在这种情况下你可以添加一些javascript来帮助。
$('#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!);
}
}
});
});
编辑:好的,所以只处理标题链接点击(就像你在问题中指定的那样),这是一个使用onbeforeunload的解决方案。完整的页面来源,因为我测试了它,以确保我给你一些建设的东西:
<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>
当然,这不是特定于Rails的帮助程序,但是您可以编写自己的帮助程序,将带有类似内容的脚本标记吐出到您的视图中。您可能还想要进行特定于表单的检查,而不是仅检查每个输入是否为空。我所制作的每一种形式都是一种美丽而独特的雪花形式。