我有一个数据表,允许用户将状态更新为 NG 或 COMPLETED ,默认为破折号(-)。如果为该行选择了完成,则将其隐藏,但是如果为NG,则只会将该行颜色更改为红色。我已经实现了功能。我的一个问题是,如果我正在使用过滤器(过滤器为 SHOW COMPLETED 或 SHOW NG ),则新更新的状态行不包含在数据表中。这是我更新行状态的方法。
//selected-status is the rows' drop down element id
$(document).on('change','.selected-status', function(){
let id = $(this).parents('tr').find('.updateStatus').val();
let selected_status = $(this).val();
let dis = this;
//status is updated in DB
$.post('/user/guest/list/updateStatus', {
selected_status: selected_status,
id: id,
_token: $("[name=csrf-token]").attr('content'),
}, function (data) {
if (data.name === "") {
console.log('Not found')
} else {
if (selected_status == 2) { //if NG
$(dis).parents('tr').css('background-color', '#f7b9b5')
} else if(selected_status == 0) { //if default
$(dis).parents('tr').css('background-color', ' white')
}else{ //if completed
$(dis).parents('tr').remove();
var tr = $(dis).closest('tr');
var row = guestTable.row( tr );
}
}
}).fail(function (err) {
console.log(err)
});
})
这是过滤器代码:
$(document).on('change','.changeDisplayGuestListTable', function(){
let status = $(".by-status").val();
guestTable
.search( '' )
.columns().search( '' )
.draw();
//default filter , show NG status and no status (dash sign)
if(status == 0){
guestTable
.column(11).search("0|2",true, false).draw();
}else{
if(status == 1){
guestTable
.column(11).search("1").draw();
}else if(status == 2){
guestTable
.column(11).search("2").draw();
}
}
});
现在这是新更新的行不包括在过滤器中的显示部分。有帮助吗?
答案 0 :(得分:0)
如果我从代码中正确理解,数据表将使用特定列保存的值作为过滤手段。似乎是第11列,所以第12列的索引是0。在这里,虽然您要发送的发帖请求可能会更新后端中的条目,但是直到刷新后才影响表本身。当前,在回调中,您正在更新行的颜色,而不是状态本身的值。因此,直到页面刷新后,情况才会改变。您还需要更新所选行的第11列中的值,以便查询将行识别为具有要搜索的值。