1

我有一个带有许多输入的大型表单(表单可以有超过 100 个值),这似乎在使用jquery.serialize().

通常,在提交表单之前只更改一两个值,所以我想我尝试只提交更改的值。只有我不知道该怎么做。

我想我想选择表单上的所有输入并调用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

尝试类似以下的操作。当一个元素改变时,我们所做的就是将该元素添加到一个数组中。提交表单时,我们仅序列化该数组中的元素,然后发布它们。

$(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 元素(以防同一个元素被一次又一次地更改)。如果您愿意,您可以在处理程序中检查这一点changejQuery.unique()返回唯一元素的数组,我们从中构建一个 jQuery 对象,并序列化结果。

于 2012-12-04T10:18:33.247 回答