Переделана инициализация 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('Элемент найден:', $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) {
|
||||
|
||||
Reference in New Issue
Block a user