jQueryのserializeArrayは、動的に作成されたフォーム要素を拾っていません
-
26-09-2019 - |
質問
私は(フォーム要素のためのデータがデータベースから来なければならないとして)動的にAJAXを使用して作成していますフォームを持っていると私は、Ajaxによって提出するフォームの要素をシリアル化します。私は現在、ちょうど私がフォーム要素を拾うことができるかどうかだけ確認するためにjQueryのウェブサイトからコードを使用して、私の理論をテストすることだし、これがどこにあるか、問題の嘘ます:
$(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
に追加され、これらは、ピックアップされていないものですされています。
任意のヘルプ素晴らしいが感謝ます。
おかげ
解決
私はもう少しここにコメントすると言えます。
あなたは.serializeArray()
にそれだけだろう<form>
提出として、あるいは可能とにかく限り近くに通じループの呼びかけ、要素が送信されるように取得します。キー部分はにここにあります:
.filter(function() {
return this.name && !this.disabled &&
(this.checked || rselectTextarea.test(this.nodeName) ||
rinput.test(this.type));
})
ただ、<form>
として提出するには name
属性にせずに要素が含まれていないでしょう、 .filter()
を呼び出し直列化されるもののうち、それらの要素をフィルタリングしますthis.name
を使用します。
他のヒント
他の誰のためにことを見つけ、この「問題」のように、してください上記のニックCraverさんのコメント、あたりとして必要だとすべてが「名前」属性が動的に作成された新しいフォーム要素に追加されることを保証するためであることに注意してください。これは私の問題を解決しました!本当にありがとうございましたニック!