私のページには、送信時にいくつかの追加の隠しフィールドが必要なフォームを使用しています。しかし、フォームの名前やID、送信ボタンなどはわからないので、onClickなどの関数を使用することはできません。したがって、beforeunloadイベントを使用して、ユーザーが離脱しようとしたときにイベントをトリガーしますページ(これにはフォームの送信が含まれます)。私はdocument.activeElementを使ってイベントをトリガしたものを見つけ出し、フォーム/サブミットの場合はフォームに隠しフィールドを追加します。beforeunloadで隠しフィールドを追加する
それはこのような何かに降りてくるコードダウンストリップ:
var javascriptData = ['val1','val2','val3']; // usually gets values dynamically and can differ in size
$(window).bind('beforeunload', function(e) {
var activeForm = document.activeElement.form;
for(var i = 0; i < javascriptData.length; i++){
$(activeForm).append('<input type="hidden" name="test-data[]" value="'+javascriptData[i]+'" />');
}
return false; // just for debug purposes.
}
コードが動作し、要素をフォームに追加されますが、それは次のページに$ _POSTに表示されませんが。しかし、コードの最後の行(falseを返す)は、私がページにとどまっている場合は、送信ボタンをもう一度押して、をのままにして、$ _POSTをチェックして、ページを終了するかどうかを尋ねるポップアップを作成します。そこにフィールド。私の推測では、$ _POSTのデータは、beforeunload関数がトリガされる前に収集されています。
私の質問は次のとおりです: "beforeunloadイベントのフォームに隠しフィールドを追加する方法はありますか?"
ご協力いただきありがとうございます。
私はあなたのプロセスを理解していません。送信のためにアンロードが行われる場合は、隠しフィールドを追加する必要があります。したがって、あなたがそれらをBeeforeUnloadに追加することができれば、それらを追加することもできます。どうしてあなたはどうですか? – mplungjan
フォームの名前/ IDはあらかじめわからないので、特定のonSubmitフォームが問題外だったと思いました。あなたの答えとコメントの組み合わせによって、私はページ上のすべてのフォームにonsubmitを追加して、送信されたフォームに隠しフィールドを追加することしかできないことに気づきました。なぜ私はそれを以前考えなかったのか分かりません。私はそれをやろうと思う、ありがとう。 – Ilians