1

2 つのフォームと、両方のフォームの外側にある隠しフィールドを含むページがあります。

いずれかのフォームで隠しフィールドを送信するにはどうすればよいですか?

私はjQueryでこのようなことをすることを考えました:

<script type="text/javascript">
    $(function() {
        $('form').submit(function() {
            // do something to move or copy the
            // hidden field to the submitting form
        });
    });
</script>

これは機能しますか?他のアイデアはありますか?

編集

hidden フィールドには、変更されないシリアル化されたオブジェクト グラフが格納されます。どちらのサーバー メソッドにもオブジェクトが必要です。シリアル化されたオブジェクト文字列はかなり大きくなる可能性があるため、サーバーからこれを 2 回送信したくありません。

4

5 に答える 5

4

送信する直前に、要素のコピーを各フォームに挿入するだけです。このようにして、他のフォーム フィールドに影響を与えることなく、非表示のフォーム フィールドごとに異なる情報を持つことができます。


このようなもの:

<script type="text/javascript">
    $(function() {
        $('form').submit(function() {
            $("#hidden_element").clone().appendTo(this);
        });
    });
</script>

新しいコピーを作成せずに両方のフォームにまったく同じ要素を使用する場合は、使用しないでくださいclone()


clone()およびappendTo()のドキュメントを参照してください

編集:

フォームが送信するすべてのリクエストで隠し要素を送信したくない場合。その間、そのユーザーのデータベースに保存することを検討してください。そのコンテンツを 1 回、ページのリロードごとに 1 回だけ送信してから、非表示の要素のデータベース ID をフォームの投稿ごとに送信するだけです。

ページの読み込み時に、次のようになります。

$.post("page.php", { reallyBigObject : $("#hiddenfield").val() }, function(insertedID){
  $("#hiddenfield").val(insertedID);
});

次に、サーバー側のコードで:

//insert $_POST["reallyBigObject"] into databse
//get the just inserted id (in php it's done with mysql_insert_id())
//echo, or print the just inserted id, and exit

このようにして、js はコールバックを取得します。

これで、通常どおりにフォームを送信できますが、今回は ID (整数) のみをサーバーに送信しています。次に、サーバーからオブジェクトを削除するだけです (cron を実行して X 時間後に削除するか、別のリクエストを送信して削除します。

正直なところ、あなたが異議を唱えない限り(!!)、サーバーに2つのリクエストを単純に送信するよりも、1回だけ送信して保存する方がはるかに複雑だと思います.

他にご不明な点がございましたらお知らせください...

于 2009-07-31T17:38:43.100 に答える
4

HTML5 では、input 要素に「form」属性を含めることができます。form 属性の値は、フィールドが属するフォームの ID です。フィールドを複数のフォームに含めるには、スペースで区切られたリストにすべてのフォーム ID を含めます。残念ながら、form 属性は IE ではまったくサポートされていません (IE 9 以降)。FF と Chrome のサポートは、それぞれバージョン 4 と 10 で開始されます。

于 2011-10-24T22:12:54.490 に答える
2

ページの読み込み時に両方のフォームにフィールドを追加します。

$(function() {
    $('#form1, #form2').append($('input[name=fieldName]'));
});
于 2009-07-31T17:34:33.530 に答える
1

ajax 以外の送信を行っていると仮定すると、送信されるフォームにフィールドを追加するだけで済みます。ただし、この情報が両方の形式で必要な場合は、この値をサーバー側でセッション ストアに格納することはお勧めできません。このようにして、非 js クライアントも機能します。

 $(function() {
        $('form').submit(function() {
             $('input.yourhiddenSubmit').appendTo(this);
        });
    });
于 2009-07-31T17:35:21.890 に答える
1

次のフォームに変数を渡す唯一の方法は、AJAX を使用する場合を除き、フォームが送信される (GET または POST) ときに渡されるデータにその変数を含めることです。「正当な理由」で実際のフォームの外に隠し変数を置きたいと仮定すると、次のように、送信の直前に jQuery を使用して非表示の入力フィールドをフォームに含めることをお勧めします。

<script type="text/javascript">
    $(function() {
        $('form').submit(function() {
            $(this).append("<input type='hidden' name='hiddenField' value='"+$("#hiddenField").val()+"' />");
            return true;
        });
    });
</script>

「hiddenField」のすべてのインスタンスをフォーム外の非表示フィールドの ID に置き換えます。これにより、ページの他の場所にある非表示フィールドの値で送信される直前に、フォーム内に新しい入力が作成されます。

それを超えて、あなたの正確な問題が何であったか (およびそのフィールドがフォームに含まれていない理由) についてもう少し具体的に説明する必要があります。

上記のコードは理論上は機能するはずですが、実際に自分でテストする機会はありませんでした。

于 2009-07-31T17:39:10.587 に答える