从数组中删除动态创建的行

时间:2012-11-03 22:18:44

标签: javascript jquery html ajax

我有两个文本框和一个添加按钮。单击“添加”时,它会在文本框下方生成一个表格,每行都有一个“删除”按钮。当你单击删除它删除表行但不删除数组中的内容(至少我不认为)。

如何删除内容呢?目前,当我点击添加然后删除一些它搞砸了我的数据库表,通过插入第一个罚款但然后通过不插入它,或只是添加1列搞乱其余....如果我不删除任何它工作得很好。

 var $tdRemoveRow = $('<td>').appendTo($tr);
    $('<a>').attr({
        'href': '#',
    'id': 'submit-button'
    }).text("Remove").click(function() {
        $tr.remove();
        return false;
    }).appendTo($tdRemoveRow);

错误必须在某处的上述代码中。有没有人看到问题?

 var locations = [];   
$("#add").click(function() {
    var address = $("#address").val();
    var city = $("#city").val();

    if (address =="" || city =="") {
    $("#locationDeals").text('*Please enter an address and city');
    return false;
} 
else {
codeAddress();
        var $tr = $('<tr>').css({
            'padding': '4px',
            'background-color': '#ddd'
        }).appendTo('#locationDeals');

        var location = [
            address,
            city                
        ];
        locations.push(location);

        for (i = 0; i < 2; i++) {
            var $td = $('<td>').appendTo($tr);
            $('<span>').text(location[i]).appendTo($td);
            $('<input type="hidden">').attr({
                'name': 'loc[' + ctr + '][' + i + ']',
                'value': location[i]
            }).appendTo($td);
        }

        var $tdRemoveRow = $('<td>').appendTo($tr);
        $('<a>').attr({
            'href': '#',
        'id': 'submit-button'
        }).text("Remove").click(function() {
            $tr.remove();
            return false;
        }).appendTo($tdRemoveRow);

        ctr++;

        $("#locationtext").text('');
        return false;
    } 
});

1 个答案:

答案 0 :(得分:0)

删除行时,使用.splice也将其从数组中删除:

.click(function() {
    $tr.remove();
    locations.splice(locations.indexOf(location), 1);
    return false;
})

请注意,如果location不在locations内,则行为不正确,但在您的代码中保证不会出现这种情况。


你也可以减少输入名称中的索引(在删除tr之前):

var index = $tr.index();
$("#tableDailyDeals input[type='hidden']").each(function() {
    this.name = this.name.replace(/\[(\d+)\]/, function(str, number) {
      return "[" + (+number > index ? number - 1 : number) + "]";
    });
});