Переделана инициализация Select2 для поиска

- Уничтожаем существующий Select2 перед переинициализацией
- Упрощена конфигурация ajax
- Добавлено логирование select2 instance и контейнера
- Добавлена обработка input event на элементе поиска
- Увеличена задержка для отладки (500ms вместо 300ms)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-10 22:33:53 +03:00
parent fa4f4efb66
commit e182839326

View File

@@ -406,6 +406,13 @@ document.addEventListener('DOMContentLoaded', function() {
console.log('=== ИНИЦИАЛИЗАЦИЯ SELECT2 ДЛЯ CUSTOMER ===');
console.log('Элемент найден:', $customerSelect.length > 0);
console.log('ID элемента:', $customerSelect.attr('id'));
console.log('HTML select перед инициализацией:', $customerSelect.prop('outerHTML').substring(0, 200));
// Уничтожаем существующий Select2 если он есть
if ($customerSelect.data('select2')) {
console.log('Уничтожаем существующий Select2');
$customerSelect.select2('destroy');
}
$customerSelect.select2({
theme: 'bootstrap-5',
@@ -414,44 +421,28 @@ document.addEventListener('DOMContentLoaded', function() {
placeholder: 'Начните вводить имя, телефон или email',
minimumInputLength: 1,
allowClear: true,
tags: false,
dropdownAutoWidth: false,
ajax: {
url: '{% url "customers:api-search-customers" %}',
type: 'GET',
dataType: 'json',
delay: 300,
quietMillis: 250,
delay: 500,
data: function(params) {
console.log('AJAX DATA FUNCTION вызвана, поисковый запрос:', params.term);
const queryData = {
q: params.term || '',
page: params.page || 1
console.log('>>> AJAX DATA вызвана, поисковый запрос:', params.term);
return {
q: params.term || ''
};
console.log('Отправляем данные:', queryData);
return queryData;
},
processResults: function(data, params) {
console.log('AJAX RESPONSE получен:', data);
console.log('Количество результатов:', data.results ? data.results.length : 0);
if (data.results) {
data.results.forEach(function(item, index) {
console.log('Результат ' + index + ':', item);
});
}
console.log('>>> AJAX RESPONSE получен:', data);
return {
results: data.results || [],
pagination: {
more: data.pagination ? data.pagination.more : false
}
results: data.results || []
};
},
cache: false,
error: function(jqXHR, textStatus, errorThrown) {
console.error('AJAX ERROR при поиске клиента:', {
status: textStatus,
error: errorThrown,
statusCode: jqXHR.status,
responseText: jqXHR.responseText
error: function(xhr, status, error) {
console.error('>>> AJAX ERROR:', {
status: status,
error: error,
responseText: xhr.responseText
});
}
},
@@ -461,6 +452,8 @@ document.addEventListener('DOMContentLoaded', function() {
});
console.log('Select2 инициализирован');
console.log('Select2 data:', $customerSelect.data('select2'));
console.log('Select2 контейнер создан:', $customerSelect.next('.select2-container').length > 0);
// Логируем события
$customerSelect.on('select2:opening', function(e) {
@@ -490,12 +483,29 @@ document.addEventListener('DOMContentLoaded', function() {
// Проверяем наличие input элемента внутри Select2
setTimeout(function() {
const searchInput = $customerSelect.data('select2').$search || $customerSelect.data('select2').$searchContainer?.find('input');
console.log('Select2 search input найден:', !!searchInput);
if (searchInput) {
console.log('Search input element:', searchInput);
const select2Instance = $customerSelect.data('select2');
console.log('Select2 instance:', select2Instance);
if (select2Instance && select2Instance.$search) {
console.log('>>> Found $search:', select2Instance.$search);
select2Instance.$search.on('input', function(e) {
console.log('>>> Search input changed to:', $(this).val());
});
} else {
console.log('>>> $search не найден');
}
}, 500);
// Пробуем找到 input через контейнер
const container = $customerSelect.next('.select2-container');
console.log('Select2 container найден:', container.length > 0);
if (container.length > 0) {
const searchInput = container.find('input');
console.log('Input fields в контейнере:', searchInput.length);
searchInput.on('input', function(e) {
console.log('>>> Input в контейнере изменился на:', $(this).val());
});
}
}, 1000);
// Форматирование опции в списке
function formatCustomerOption(option) {