2012-12-04 60 views
1

我有一个很大的表单有很多输入(表单可以有100多个值),这似乎是使用jquery.serialize()回发到服务器时造成一些不稳定。选择表单值OnChange

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

我想我想选择表单上的所有输入并在它们上调用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); 
      }); 
    }); 
}); 

这工作,但它在每一个输入编辑帖子。我喜欢关于找出哪些输入是脏的想法,但不知道如何实现这一点。

+0

如果您将数据存储到数据库中,则可以使用JSON将其发送到后面的代码。如果你这样做了,你将不得不确保很多字段可以为空。这将导致您将有无效/不完整的数据条目。你是仅仅使用jQuery或者为你的代码使用任何东西? –

+0

请将代码发布到目前为止。 –

+0

无法捕获onChange事件并在表单字段中设置属性,如isDirty,然后在提交表单时检查哪些字段具有此属性。 – tsukimi

回答

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元素。如果您愿意,您可以在change处理程序中检查此内容。 jQuery.unique()返回唯一元素的数组,我们从中构建一个jQuery对象,并对结果进行序列化。