Jquery使用特定结果更新数组项

Jquery使用特定结果更新数组项,jquery,arrays,Jquery,Arrays,我有一个表单,它有一些预先填充的字段。这些字段的数据和ID值从数据库中提取 用户可以选择添加、编辑或删除行,并保存结果。为了节省将大量值向后推的时间,我只向数组中添加已更改的、新的或标记为删除的条目,然后将它们发送回我的php页面 表单字段如下所示: <tr> <td> <input name='id[]' type='hidden' value='123456789'/> <input name="s

我有一个表单,它有一些预先填充的字段。这些字段的数据和ID值从数据库中提取

用户可以选择添加、编辑或删除行,并保存结果。为了节省将大量值向后推的时间,我只向数组中添加已更改的、新的或标记为删除的条目,然后将它们发送回我的php页面

表单字段如下所示:

  <tr>
        <td>
        <input name='id[]' type='hidden' value='123456789'/>
        <input name="site[]" type="text" value='123'/>
        </td>
        <td><input name="location[]" type="text" value='NW'/></td>
        <td><a href='#' name="deleteRow"/>x</td>
    </tr>
如果用户标记要删除的行,将向数组中添加类似的条目:

"del:99887766:0:0"
如果用户添加新行,将向数组中添加与此类似的条目:

"add:1471938503:0:0"
如果编辑了条目,则添加到数组中的条目如下所示:

"edit:1471872633890:8845:0"
这一切似乎在一定程度上起作用

当用户编辑一个条目时,我使用以下命令检查数组并更新ID匹配的数组条目。因此,如果他们多次编辑同一个值,那么数组中只有一个副本

var id = $(this).closest('tr').find('input[name="id[]"]').val()
var site = $(this).closest('tr').find('input[name="number[]"]').val()
var location = $(this).closest('tr').find('input[name="description[]"]').val()
var res = 'edit:' + id + ':' + site + ':' + location;

rows = rows.map(function(value) {
if( value.indexOf(id) > -1 ) {
    return res;
}
    return value;
});

if ($.inArray(res, rows) == -1) {
    rows.push(res)
}
这似乎又起作用了,但我有个问题。。 添加新行时,将向数组中添加一个条目:
“add:1471938503:0:0”
,但当用户随后编辑该条目时,该条目将更改为具有
编辑
而非
添加

如何对其进行编码,使新条目具有
add
模式,并保持为
add
,即使已编辑。
del
保持为
del
edit
保持为
edit

我试过:

var res = 'edit:' + id + ':' + site + ':' + location;
var resAdd = 'add:' + id + ':' + site + ':' + location;
rows = rows.map(function(value) {
        if( value.indexOf('add:'+id) > -1 ) {
            return resAdd;
        } else {
            return resEdit;
        }
            return value;
        });
但那只是把一切都搞砸了

你知道我该怎么做吗? 我已经创建了一个。。但它似乎不想跑


谢谢

您可以在
映射
功能中检查这一点,并在
res
前面预先设置正确的操作

var res = ':' + id + ':' + site + ':' + location;

rows = rows.map(function(value) {
    if( value.indexOf(id) > -1 ) {
        return (value.indexOf('add') === 0 ? 'add' : 'edit') + res;
    }

    return value;
});
甚至可以使用
substr
进行检查:

return (value.subtr(0, 3) === 'add' ? 'add' : 'edit') + res;

我将创建3个数组,每种类型的操作一个,这样您就不会遇到添加变为编辑的问题。在提交全部内容之前,我会将它们合并。谢谢你的回复。这类工作。当用户首次加载页面时,数组为空。因此,第一次编辑会将条目添加到数组中。如果($.inArray(res,rows)=-1){rows.push(res)}更新该行的任何进一步编辑,则使用
。但是使用新代码时,添加到数组中的第一个条目丢失了
edit
,因此我最终得到了重复项。请参阅我的原始帖子,了解用于将原始条目添加到数组中的代码。谢谢你必须在你需要的地方预编
edit
?!类似于
if($.inArray('edit'+res,rows)==-1){rows.push('edit'+res)}
。这应该能奏效@谢谢你的编辑工作。但是添加新行会导致一个条目作为
[“add:1471952790023:0:0”]
添加到数组中,但是当您编辑它时,会得到
[“add:1471952790023:sd:sd”,“edit:1471952790023:sd:sd”]
它们都在更新。。有什么想法吗?在上面的例子中,
1471952790023
不应该有编辑条目,只有添加。我想我可能已经开始工作了。。通过将
$.inArray
更改为'if($.inArray($.inArray('edit'+res,rows)=-1&&$.inArray('add'+res,rows)=-1)){rows.push('edit'+res)}虽然不漂亮,但似乎可以工作!
return (value.subtr(0, 3) === 'add' ? 'add' : 'edit') + res;