У меня есть два варианта кода, каждый из которых имеет желаемое поведение и нежелательное поведение ... Но я не понимаю, почему это происходит, или как их объединить, чтобы получить оба желаемых поведения. (Я пробовал разные варианты операторов if / else, пытаясь получить оба желаемых поведения в одном коде, но пока безуспешно.
Вариант 1: http://jsfiddle.net/crashvector/q81m7sab/15/
Правильное поведение: Вы можете выбрать строку, изменить появившийся раскрывающийся список (выпадающее значение записывается в таблицу) и отменить выбор строки. (Столбец, отмеченный флажком, обновляется с 1 до 0.)
Нежелательное поведение: Вы можете выбрать строку, а затем сразу же отменить ее выбор. Столбец снятия флажка обновляется с 1 до 0, НО раскрывающийся список не записывает свое текущее значение в таблицу и исчезает.
}).on('deselect', function (e, dt, type) {
var dt_indexes = dt[0]
if (type === 'row') {
$.each( dt_indexes, function ( index ) {
var row = dataTable.row( dt_indexes[index] );
if(!Category && !Category.length) {
writeCell($(row.node()).find('select'));
};
toggleDataAndDraw(row, type, 0);
} );
}
dataTable.draw();
});
var writeCell = dropdown => {
var currentRow = dataTable.row(dropdown.closest('tr'));
var rowData = currentRow.data();
rowData.Category = dropdown.val();
$(currentRow.node()).find('td:eq(6)').html(
currentRow.data().Category
);
currentRow.draw();
};
Вариант 2: http://jsfiddle.net/crashvector/q81m7sab/16/
Правильное поведение: Вы можете выбрать строку, а затем немедленно отменить ее выбор. Столбец, отмеченный флажком, обновляется с 1 до 0, выпадающее значение записывается в таблицу и исчезает.
Нежелательное поведение: Вы можете выбрать строку, изменить появившийся раскрывающийся список (выпадающее значение записывается в таблицу) и отменить выбор строки. НО столбец снятия отметки НЕ ОБНОВЛЯЕТСЯ с 1 до 0.
}).on('deselect', function (e, dt, type) {
var dt_indexes = dt[0]
if (type === 'row') {
$.each( dt_indexes, function ( index ) {
var row = dataTable.row( dt_indexes[index] );
//if(!Category && !Category.length) {
writeCell($(row.node()).find('select'));
//};
toggleDataAndDraw(row, type, 0);
} );
}
dataTable.draw();
});
var writeCell = dropdown => {
var currentRow = dataTable.row(dropdown.closest('tr'));
var rowData = currentRow.data();
rowData.Category = dropdown.val();
$(currentRow.node()).find('td:eq(6)').html(
currentRow.data().Category
);
currentRow.draw();
};
КОНЕЦНАЯ ЦЕЛЬ Одна функция, которая имеет как правильное, так и нежелательное поведение.