Javascript 更新表中的数据

Javascript 更新表中的数据,javascript,jquery,html,ajax,json,Javascript,Jquery,Html,Ajax,Json,我有一个从服务器接收的表:使用ajax: $.each(data, function(i, item) { $('#MyTable tbody').append("<tr>"d +"<td>" +data[i].A+ "</td><td>" +data[i].B +"</td><td><input type='text

我有一个从服务器接收的表:使用ajax:

   $.each(data, function(i, item) {
        $('#MyTable tbody').append("<tr>"d
             +"<td>" +data[i].A+ "</td><td>" 
             +data[i].B
             +"</td><td><input type='text' value='"
             +data[i].C+"'/></td><td><input type='text' value='"
             + data[i].D+"'/></td>"
             + "</tr>");
        });
此外,我正在使用此事件:

$('#MyTable input[type=text]').on('change',function() {
     $(this).addClass('changed');
}) 

这是因为您在使用.changed元素时没有检查它是C还是D。 例如让我们考虑所有可能的情况: 1.您只更改了C:-现在输入C具有类。因此更改了执行fileldValues['C']=$inputF[0]。val;为“c”提供正确的值。 2.您同时更改了这两个字段-然后这两个字段都具有该类。因此,这两个调用都将再次工作 3.问题-仅更改D-这意味着CInput字段将不具有class.changed,但D字段将具有class.changed。因此,当您使用选择器获取它时,现在inputF[0]实际上是字段D,因为它是唯一一个类已更改的字段。这就是为什么D中的值写在C字段值中的原因

要解决这个问题,只需创建一种方法来知道哪个字段被更改,以便将更改后的值分配给正确的fieldValue

有很多方法可以用来识别C和D。我个人会选择将它们分别添加到不同的附加类中。因为您有tr对象,并且使用find,所以您将只接收该元素中满足选择器的对象,因此,将C类添加到C输入中,将D类添加到D输入中,可以让您知道哪个是,记住一个元素可以有多个类,因此您不必附加这些类。稍后在代码中进行更改,如下所示: 1.创建表时:

$.each(data, function(i, item) {
    $('#MyTable tbody').append("<tr>"d
         +"<td>" +data[i].A+ "</td><td>" 
         +data[i].B
         +"</td><td><input type='text' class='C' value='"
         +data[i].C+"'/></td><td><input type='text' class='D' value='"
         + data[i].D+"'/></td>"
         + "</tr>");
    });
由于您总是使用它们的值,我不确定您为什么要专门检查是否有任何更改?如果只想发送更改后的值,则可通过以下方式进行修改:

function getUserData()
{
    var newData = new Array();
    $.each($('#MyTable tbody tr'),function(key,val){ 
        var fileldValues = {};

        var inputC = $(this).find(".C");
        if ($(inputC).hasClass("changed")) { 
           fileldValues['c'] = $(inputC).val();
        }
        var inputD = $(this).find(".D");
        if ($(inputD).hasClass("changed")) { 
           fileldValues['d'] = $(inputD).val();
        }

        fileldValues['a'] = $($(this).children()[0]).text();
        fileldValues['b'] = $($(this).children()[1]).text();
        newData.push(fileldValues);
    });
    return JSON.stringify(newData);
}

希望对你有所帮助,但我没有时间去测试它。还有一些其他方法可以做到这一点,使用属性,ids不建议Id应该是唯一的,甚至不建议jQuery数据方法。不确定哪一个是最好的,但这一个对我来说是最简单的

请创建一个你的代码的小提琴好的。我以前理解这个问题,现在经过你的解释我理解得很好。但我试着分开,坚持住了。你能写正确的代码或编辑我的代码吗?分开的意思是:添加特殊字段,指示这是D或C列。你只需更改这个:var inputF=$this.findinput[type=text]。已更改;对此:var inputC=$this.find.C;var inputD=$this.find.D;我只想发送changing=editing by user列,这不会是一个问题。您读过第二个代码段了吗?最初,您希望只发送更改后的值,但再次发送FieldValue['c']和FieldValue['d']。因此,我想知道您是否只想发送更改的类,然后检查更改的类,然后将其添加到FieldValue。
function getUserData()
{
    var newData = new Array();
    $.each($('#MyTable tbody tr'),function(key,val){              
        var inputC = $(this).find(".C");
        var inputD = $(this).find(".D");
        var fileldValues = {};
        fileldValues['c'] = $(inputC).val();
        fileldValues['d'] = $(inputD).val();
        fileldValues['a'] = $($(this).children()[0]).text();
        fileldValues['b'] = $($(this).children()[1]).text();
        newData.push(fileldValues);
    });
    return JSON.stringify(newData);
}
function getUserData()
{
    var newData = new Array();
    $.each($('#MyTable tbody tr'),function(key,val){ 
        var fileldValues = {};

        var inputC = $(this).find(".C");
        if ($(inputC).hasClass("changed")) { 
           fileldValues['c'] = $(inputC).val();
        }
        var inputD = $(this).find(".D");
        if ($(inputD).hasClass("changed")) { 
           fileldValues['d'] = $(inputD).val();
        }

        fileldValues['a'] = $($(this).children()[0]).text();
        fileldValues['b'] = $($(this).children()[1]).text();
        newData.push(fileldValues);
    });
    return JSON.stringify(newData);
}