2

<form>単一のページに複数あり、すべてが一意の ID を持ち、フォームの本文は以下のようなものです。

<form id="form-main">
    <table>
        <tr>
           <td><input type="text" name="field1"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>
    <table>
        <tr>
           <td><input type="text" name="field2"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>     
</form>

<form id="form-second">
    <table>
        <tr>
           <td><input type="text" name="field3"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>
    <table>
        <tr>
           <td><input type="text" name="field4"/></td>
                . . . . . . .
                . . . . . . .
        </tr>
    </table>
</form>

フォームフィールドを整列させるためにテーブルを使用することはお勧めできません.CSSでこれを行うことができますが、実際の問題は、を使用する$("#form-main").serializeArrayと、このフォームのすべてのフィールドを配列オブジェクトに取得する必要があることですが、フォーム内の最初のテーブルのフィールドのみを取得すると、残りの入力は単純に無視されます。

これは の有効な動作serializeArray()ですか? または私のテーブルの使用は本当の問題ですか?divテーブルの代わりに sを使用できますが、それが最後のオプションになります。また、これらの複数のフォームでは、最初のテーブルに入力が必須のフィールドがあるため、「入力時に検証」アプローチとともに、これらの必須フィールドを繰り返して、空のままになっていないことを確認しています。各フォームの最初のテーブルのみが配列オブジェクトに含まれているのはそのためです。

4

3 に答える 3

3

これは serializeArray の完全に有効な使用法であり、同じ名前の複数の要素でも機能するはずです。簡単なテスト(http://jsfiddle.net/Q5s5V/)を行ったところ、すべてが期待どおりに動作しました...コードに何か他の問題があると思います。

試してみることのできることの 1 つは、フォームではなく入力自体を選択して、1) 期待するすべての入力があるか、2) そのコレクションが適切にシリアル化されているかを確認することです。

var $elements = $('#form-main :input');
console.log($elements.length);
console.log($elements.serializeArray());

私の推測では、これらの要素を選択できないようにしているマークアップ エラー (閉じられていないタグなど) があると思います。

于 2012-04-11T15:01:53.610 に答える
2

これは古い質問であることは知っていますが、ここに正しい答えが表示されないことに驚きました。問題は、ページに 1 つではなく 2 つのフォームがあることです。

serializeArray() は、指定したフォーム タグ内のフィールドでのみ機能するため、$("#form-main").serializeArray を使用すると、field1 と field2 のみが含まれます。

Field3 と field4 は #form-main になく、#form-second にあるため含まれません。

于 2018-01-17T00:27:21.590 に答える