Переделана инициализация 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:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user