Что я сделал:
Я реализовал логику, позволяющую проверить, настроен ли столбец для раскрывающегося списка. Если да, он должен отображать элемент с предопределенными параметрами.
Если столбец не настроен для раскрывающегося списка, он отображает текстовое поле для редактирования.
Я также проверил конфигурацию столбца и добавил console.log( ) для устранения проблемы.
Ожидаемое поведение:
Когда я дважды щелкаю ячейку в столбце 1, я ожидаю появления раскрывающегося списка со следующими параметрами:
Разработчик
Дизайнер
Менеджер
Аналитик
Фактическое поведение:
Когда я дважды щелкаю ячейку в столбце 1, вместо раскрывающегося списка отображается текстовое поле. Для других столбцов правильное поведение (текстовое поле) работает нормально.
Код: Выделить всё
if (settings.enableEditing) {
$table.on('dblclick', 'td', function () {
const $cell = $(this);
const colIndex = $cell.index(); // Get column index
// 4.1 Skip if the column is not editable
if (settings.editableColumns.length > 0 && !settings.editableColumns.includes(colIndex)) {
return; // Skip if column is not editable
}
// 4.2 Prevent multiple edit fields
if ($cell.find('input, select').length > 0) return;
// 4.3 Save original value
const originalValue = $cell.text().trim();
// Debugging: Check what colIndex is and what dropdownColumns[colIndex] contains
console.log("Selected column index: " + colIndex);
console.log("Dropdown columns value: ", settings.dropdownColumns[colIndex]);
// 4.4 Check if the column has a dropdown
if (settings.dropdownColumns && settings.dropdownColumns[colIndex] && settings.dropdownColumns[colIndex].length > 0) {
// 4.4.1 Create dropdown
const $dropdown = $('').addClass('editable-dropdown');
settings.dropdownColumns[colIndex].forEach((option) => {
const $option = $('')
.val(option)
.text(option)
.prop('selected', option === originalValue); // Set original value as selected
$dropdown.append($option);
});
// 4.4.2 Add Save and Cancel icons
const $saveIcon = $('')
.addClass('editable-save-icon')
.html('✔') // Checkmark icon (✔)
.on('click', function () {
const newValue = $dropdown.val();
$cell.empty().text(newValue); // Update cell value
if (settings.onEditComplete) {
settings.onEditComplete($cell, originalValue, newValue); // Trigger callback
}
});
const $cancelIcon = $('')
.addClass('editable-cancel-icon')
.html('✖') // Cross icon (✖)
.on('click', function () {
$cell.empty().text(originalValue); // Revert to original value
});
// 4.4.3 Append dropdown and icons to the cell
$cell.empty().append($dropdown).append($saveIcon).append($cancelIcon);
} else {
// 4.5 Default text input for non-dropdown columns
const $input = $('')
.attr('type', 'text')
.val(originalValue)
.addClass('editable-input');
// 4.5.1 Add Save and Cancel icons
const $saveIcon = $('')
.addClass('editable-save-icon')
.html('✔') // Checkmark icon (✔)
.on('click', function () {
const newValue = $input.val().trim();
$cell.empty().text(newValue);
if (settings.onEditComplete) {
settings.onEditComplete($cell, originalValue, newValue);
}
});
const $cancelIcon = $('')
.addClass('editable-cancel-icon')
.html('✖') // Cross icon (✖)
.on('click', function () {
$cell.empty().text(originalValue);
});
// 4.5.2 Append input and icons to the cell
$cell.empty().append($input).append($saveIcon).append($cancelIcon);
// 4.5.3 Focus input field
$input.focus();
}
});
}
$(document).ready(function () {
$('#smartDataTable').SmartDataTablePro({
enableEditing: true,
editableColumns: [1, 2], // Make Position and Age editable
dropdownColumns: {
1: ['Developer', 'Designer', 'Manager', 'Analyst'], // Dropdown for column 1 (Position)
},
nonEditableColumns: [0], // Column 0 (Name) is non-editable
onEditComplete: function ($cell, originalValue, newValue) {
console.log(`Cell updated from "${originalValue}" to "${newValue}"`);
},
});
});
С уважением
Подробнее здесь: https://stackoverflow.com/questions/793 ... able-table