Переделана инициализация 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('=== ИНИЦИАЛИЗАЦИЯ SELECT2 ДЛЯ CUSTOMER ===');
console.log('Элемент найден:', $customerSelect.length > 0); console.log('Элемент найден:', $customerSelect.length > 0);
console.log('ID элемента:', $customerSelect.attr('id')); 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({ $customerSelect.select2({
theme: 'bootstrap-5', theme: 'bootstrap-5',
@@ -414,44 +421,28 @@ document.addEventListener('DOMContentLoaded', function() {
placeholder: 'Начните вводить имя, телефон или email', placeholder: 'Начните вводить имя, телефон или email',
minimumInputLength: 1, minimumInputLength: 1,
allowClear: true, allowClear: true,
tags: false,
dropdownAutoWidth: false,
ajax: { ajax: {
url: '{% url "customers:api-search-customers" %}', url: '{% url "customers:api-search-customers" %}',
type: 'GET',
dataType: 'json', dataType: 'json',
delay: 300, delay: 500,
quietMillis: 250,
data: function(params) { data: function(params) {
console.log('AJAX DATA FUNCTION вызвана, поисковый запрос:', params.term); console.log('>>> AJAX DATA вызвана, поисковый запрос:', params.term);
const queryData = { return {
q: params.term || '', q: params.term || ''
page: params.page || 1
}; };
console.log('Отправляем данные:', queryData);
return queryData;
}, },
processResults: function(data, params) { processResults: function(data, params) {
console.log('AJAX RESPONSE получен:', data); 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);
});
}
return { return {
results: data.results || [], results: data.results || []
pagination: {
more: data.pagination ? data.pagination.more : false
}
}; };
}, },
cache: false, error: function(xhr, status, error) {
error: function(jqXHR, textStatus, errorThrown) { console.error('>>> AJAX ERROR:', {
console.error('AJAX ERROR при поиске клиента:', { status: status,
status: textStatus, error: error,
error: errorThrown, responseText: xhr.responseText
statusCode: jqXHR.status,
responseText: jqXHR.responseText
}); });
} }
}, },
@@ -461,6 +452,8 @@ document.addEventListener('DOMContentLoaded', function() {
}); });
console.log('Select2 инициализирован'); 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) { $customerSelect.on('select2:opening', function(e) {
@@ -490,12 +483,29 @@ document.addEventListener('DOMContentLoaded', function() {
// Проверяем наличие input элемента внутри Select2 // Проверяем наличие input элемента внутри Select2
setTimeout(function() { setTimeout(function() {
const searchInput = $customerSelect.data('select2').$search || $customerSelect.data('select2').$searchContainer?.find('input'); const select2Instance = $customerSelect.data('select2');
console.log('Select2 search input найден:', !!searchInput); console.log('Select2 instance:', select2Instance);
if (searchInput) {
console.log('Search input element:', searchInput); 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) { function formatCustomerOption(option) {