2011-12-09 14 views
0

私のページには、送信時にいくつかの追加の隠しフィールドが必要なフォームを使用しています。しかし、フォームの名前や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イベントのフォームに隠しフィールドを追加する方法はありますか?"

ご協力いただきありがとうございます。

+3

私はあなたのプロセスを理解していません。送信のためにアンロードが行われる場合は、隠しフィールドを追加する必要があります。したがって、あなたがそれらをBeeforeUnloadに追加することができれば、それらを追加することもできます。どうしてあなたはどうですか? – mplungjan

+0

フォームの名前/ IDはあらかじめわからないので、特定のonSubmitフォームが問題外だったと思いました。あなたの答えとコメントの組み合わせによって、私はページ上のすべてのフォームにonsubmitを追加して、送信されたフォームに隠しフィールドを追加することしかできないことに気づきました。なぜ私はそれを以前考えなかったのか分かりません。私はそれをやろうと思う、ありがとう。 – Ilians

答えて

2

上記のコメントと同様に、送信イベントにフックできます。

$('form').submit(function() { 
    for(var i = 0; i < javascriptData.length; i++){ 
     $(this).append('<input type="hidden" name="test-data[]" value="'+javascriptData[i]+'" />'); 
    } 
} 
3

ページのすべてのフォームに追加してみませんか?

$(document).ready(function() { 
    $("form").append('<input type="hidden" name="test-data[]" value="test" />'); 
}); 
+0

申し訳ありませんが、私はポストを書く際に少しだけコードを取り除き、問題をはっきりさせませんでした。私は投稿を編集しました。ご覧のとおり、javascript配列を繰り返して、その中の値を隠しフィールドに使用します。配列はユーザ​​によって埋められているので、document.readyに何が入っているかは分かりません。 – Ilians

関連する問題