1

多くの入力がある大きなフォームがあり(フォームには100を超える値が含まれる可能性があります)、これにより、を使用してサーバーにポストバックするときに不安定になるようjquery.serialize()です。

フォームを送信する前に変更される値は1つか2つだけであることが多いので、変更された値だけを送信してみようと思いました。私だけがそれを行う方法がわかりません。

jquery.change()フォーム上のすべての入力を選択して呼び出し、次にを使用してeventData、変更された値を判別したいと思います。

コードに関する支援、またはこれについて私がどのように取り組むかについての別のアイデアをいただければ幸いです。


言及すべきだったと思いますが、MVC-4です。

これが私がこれまでに思いついたスクリプトです。

$(document).ready(function () {
    $("#EditForm").find("input")
        .on("change", function (event)
        {
            var name = this.name;
            var value = this.value;

            var form = {};
            form[name] = value;

            $.post("/Contracts/EditSingle", form, function (data)
            {
                $("#editContractResponse").html(data);
            });
    });
});

これは機能しますが、すべての入力編集に投稿されます。どの入力がダーティであるかを見つけるというアイデアは好きですが、それを実現する方法がわかりません。

4

1 に答える 1

0

次のようなものを試してください。要素が変更されたときに行うのは、その要素を配列に追加することだけです。フォームが送信されると、その配列内の要素のみがシリアル化され、POSTされます。

$(document).ready(function() {
    var els = [];

    // This uses event delegation, as it's more optimal for attaching handlers to multiple elements
    $('#EditForm').on('change', 'input,select,textarea', function () {
        els.push(this);
    }).on('submit', function (e) {
        // Prevent the default action (form submission) occuring, so we can AJAX instead.
        e.preventDefault();



        jQuery.post('/Contacts/Edit', $(jQuery.unique(els)).serialize(), function (data) {
            $('#editContractResponse').html(data);
        });
    });
});

jQuery.unique()重複するDOM要素を配列から削除します(同じ要素が何度も変更された場合)。change必要に応じて、代わりにハンドラー内でこれを確認できます。jQuery.unique()jQueryオブジェクトを構築する一意の要素の配列を返し、結果をシリアル化します。

于 2012-12-04T10:18:33.247 に答える