#jquery #html-table #row
#jquery #html-таблица #строка
Вопрос:
Настройка следующая: каждая строка в таблице описывает элемент из базы данных в соответствии с определенной формой. Каждый <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();
}
});
}
Приветствуется любая помощь…
Комментарии:
1. Можете ли вы показать настраиваемый обработчик? Первая мысль заключается в том, что вы используете индекс строки таблицы, а не реальный идентификатор, поэтому имеет смысл, что после удаления одного индекс все еще там (тот, что под ним, просто был перемещен вверх.)
2. Пожалуйста, покажите, как вы присваиваете значение
itemId
вclick
обработчике3. Кроме того, опубликованный вами HTML-код показывает числовые идентификаторы (которые недопустимы в HTML4), но ваш код предлагает идентификаторы, которые выглядят как
item_1
.4. Я добавил код, присваивающий значение ItemId.
5. @patrick dw именно так выглядит — item_1, item_12 Проблема заключалась в том, что во всех элементах removeExistingItem вызывался с одинаковым значением — я полагаю, что значение ItemId в анонимной функции не вычислялось до вызова этих функций, скорее, сохранялась какая-то форма ссылки на переменную ItemId. Если это так, то это имеет смысл, поскольку тогда все функции вычисляют ItemId до присвоенного ему значения. Кто-нибудь может подтвердить мой вывод?
Ответ №1:
Я думаю, вы можете упростить это, просто сохранив свою ссылку:
$(remElement).click(function()
{
var currentObj = this;
$.ajax({
url: 'myUrl',
data: { myData: 'Value1' },
success: function()
{
$(currentObj).parent().parent().remove();
}
});
});
Просто сохраните ссылку на ваш текущий объект, а затем поднимитесь по дереву, чтобы найти его родительскую строку и удалить ее.
Комментарии:
1. на мой взгляд, он выглядит намного чище, хотя я мог бы изменить строку удаления на use .closest(‘tr’), поскольку функции chaining .parent() могут запутаться.
Ответ №2:
Почему бы вам не попробовать сделать: (используя селектор идентификаторов)
$('#item_' itemId).remove();