ユーザーが現在のページのフォームに何かを入力した場合に、ユーザーが現在のページを離れるのを防ぐ Rails ヘルパーまたは Rails の方法はありますか?
フォームに未保存の変更がある場合にヘッダー リンクをクリックすると、データが失われないようにしようとしています。
ユーザーが現在のページのフォームに何かを入力した場合に、ユーザーが現在のページを離れるのを防ぐ Rails ヘルパーまたは Rails の方法はありますか?
フォームに未保存の変更がある場合にヘッダー リンクをクリックすると、データが失われないようにしようとしています。
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 固有のヘルパーではありませんが、独自のヘルパーを作成して、このようなものを含むスクリプト タグをビューに吐き出すことができます。すべての入力が空かどうかをチェックするだけでなく、フォーム固有のチェックを入れたいと思うでしょう。私が今までに作ったすべてのフォームは、何らかの形で美しくユニークなスノーフレークでした.