0

2 つのテキスト ボックスと追加ボタンがあります。[追加] をクリックすると、テキスト ボックスの下にテーブルが生成され、各行には [削除] ボタンがあります。[削除] をクリックすると、テーブルの行が削除されますが、配列内の内容は削除されません (少なくとも私は考えていません)。

コンテンツも削除するにはどうすればよいですか?現在、追加をクリックしてからいくつかを削除すると、最初のテーブルを挿入してデータベーステーブルが台無しになりますが、残りを挿入しないか、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;
    } 
});
4

1 に答える 1

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) + "]";
    });
});
于 2012-11-03T22:26:04.467 に答える