7

ajaxを使用して動的に作成されたフォームがあり(フォーム要素のデータはデータベースから取得する必要があるため)、フォームの要素をシリアル化してajaxで送信したいと思います。私は現在、jQuery Webサイトのコードを使用して理論をテストしており、フォーム要素を取得できるかどうかを確認しています。これが問題の原因です。

$(document).ready(function() {
    $('#btnCustomSearch').live('click', function() {
            $('#results').html('');
            alert($('#customSearchTable :input').serializeArray());
            // get all the inputs into an array.
            var fields = $('#customSearchTable :input').serializeArray();
            jQuery.each(fields, function(i, field) {
                $("#results").append(field.name + " = " + field.value + ", ");
            });

            // now we'll reformat the data as we need

            // here we'll send the data via ajax

    });
});

送信する前にデータにいくつかの変更を加える必要があり、このコードはまだ記述されていませんが、ページの読み込み時に存在していたページ上の入力要素が正しく取得されていることがわかりました。 Javascriptを使用して入力されたものは正しく取得されますが、ajaxを使用して作成されたものはすべて無視されます。

これは通常「ライブ」を使用して解決されることは知っていますが、を使用してこれを解決する方法がわかりませんserializeArray()。Ajaxを使用すると、追加のフォーム要素がに追加され、#customSearchTableこれらはピックアップされないものです。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

8

ここでコメントについてもう少し詳しく説明します。

あなたが呼び出すと、送信される要素を取得するために、送信と同じように、または可能な限りそれに近い.serializeArray()ループが行われます。<form>重要な部分は次のとおりです

.filter(function() {
  return this.name && !this.disabled &&
         (this.checked || rselectTextarea.test(this.nodeName) ||
         rinput.test(this.type));
})

送信にattribute<form>のない要素が含まれないのと同様に、を使用して呼び出しを行うと、これらの要素がシリアル化される要素から除外されます。name.filter()this.name

于 2010-09-03T01:34:58.490 に答える
1

これを「問題」と見なす他の人は、上記の Nick Craver のコメントに従って、動的に作成される新しいフォーム要素に「name」属性を確実に追加するだけでよいことに注意してください。これで私の問題は解決しました!本当にありがとうニック!

于 2010-09-02T12:11:44.300 に答える