4

PHP経由で送信されているフォームがあり、3つの送信アクションがあります。

  • 保存して続行
  • 保存して終了
  • セーブせずに終了する

「OnBeforeUnload」アラートをトリガーして、ユーザーがフォームアクションのいずれもクリックせず、ページを離れることを通知し、変更が保存されない場合に表示したいと思います。

次のコードを試しましたが、クリックイベントの前にunbeforeunloadがトリガーされているようです。これを達成するための最善の方法に関する提案はありますか?

$buttonpressed = false;
$j(".Actions input").click(function(){
    $buttonpressed = true;                                  
});

if(!$buttonpressed){
    window.onbeforeunload = function(){
        return "Your changes may not be saved.";
    }
}
4

1 に答える 1

18

次のように、ハンドラーでチェックを行う必要があります。

window.onbeforeunload = function(){
    if(!$buttonpressed){
        return "Your changes may not be saved.";
    }
}

現在、コードが実行されるときにバインドされます。これはwindow.onbeforeunload、コードが実行されるときです...ハンドラーを既にバインドしているため、後で変更するかどうかは関係ありません。別の方法は、次のように少し単純にすることです。$buttonpressedfalse

window.onbeforeunload = function(){
    return "Your changes may not be saved.";
}
$j(".Actions input").click(function(){
    window.onbeforeunload = null;
});

これにより、代わりにハンドラーが削除されclickます。他の送信ケースを処理するためのより適切なイベントはsubmit、次のようにイベントに添付することです。

$j(".myForm").submit(function(){
    window.onbeforeunload = null;
});
于 2010-11-13T13:18:01.897 に答える