После удаления <tr>из таблицы с помощью jquery при нажатии на события для кнопок в других строках вызываются неправильные функции - PullRequest
0 голосов
/ 17 мая 2011

Настройка следующая: каждая строка в таблице описывает элемент из базы данных в соответствии с определенной формой. Каждый элемент <td> представляет значение элемента формы. Первый элемент <td> в каждой строке представляет собой кнопку, которая при щелчке должна отправить на сервер item_id, удерживаемый в его (кнопочной) строке, и после того, как сервер вернет успех, строка, содержащая отправленный идентификатор, должен быть удален.

Что на самом деле происходит, так это то, что после того, как я удалю какую-то строку, позже в функции onclick в других строках идентификатор будет идентификатором удаленной строки. Например, если у меня есть:

<tr id=1></tr>
<tr id=2></tr>

Код Jquery, используемый для удаления строк: (itemId изменяется в цикле ...)

var num = eval($("#oldnum").val()) + 2;
for (var i=2; i < num; i++ ){
//      var remElem = $('#items tbody tr:nth-child('+i+') img[name="remitem"]');
        var remElem = $('#remitem'+(i-2));
        var row = $('#items tbody tr:nth-child('+i+')');
        var itemId = $(row).attr('id').split("_");
        //id of a row is item_actualId, we want the actualId
        itemId = itemId[1];
        $(remElem).click(function(){
            removeExistingItem(itemId);
        });
}
...
function removeExistingItem(itemId){
    var answer = confirm("האם ברצונך למחוק את  הפריט?");
    if (!answer){
        return;
    }
    var path = window.location.pathname;
    $.ajax({
        url: "/po/removeitem", dataType: "json",
        data: {id: itemId, format: "json"}, success: function(){
            $('#items tr[id="item_'+itemId+'"]').remove();
        }
    });
}

Любая помощь приветствуется ...

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Я думаю, вы можете упростить это, просто поддерживая вашу ссылку:

$(remElement).click(function()
{
    var currentObj = this;

    $.ajax({
       url: 'myUrl',
       data: { myData: 'Value1' },
       success: function()
       {
           $(currentObj).parent().parent().remove();
       }
    });
});

Просто сохраните ссылку на ваш текущий объект, а затем пройдитесь по дереву, чтобы найти его родительскую строку и удалите его.

1 голос
/ 17 мая 2011

Почему бы вам не попробовать: (с помощью селектора идентификаторов)

$('#item_'+itemId).remove();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...