Я работаю над компонентом Laravel Livewire с раскрывающимся списком с возможностью выбора нескольких вариантов. Параметры раскрывающегося списка динамически генерируются с помощью JavaScript, но после отправки формы параметры раскрывающегося списка исчезают.
Вот HTML-код раскрывающегося списка:
Проблема в том, что я не могу использовать последнюю версию Alpine.js с @livewireScripts, поскольку я использую библиотеку, включающую Alpine v2.8. К сожалению, я не могу извлечь необходимый код Alpine.js из библиотеки, поскольку он весь перемешан.
Все работает нормально, пока форма не будет отправлена и компонент Livewire не обновится, после чего раскрывающийся список исчезнет.
Это код интерфейса:
Я работаю над компонентом Laravel Livewire с раскрывающимся списком с возможностью выбора нескольких вариантов. Параметры раскрывающегося списка динамически генерируются с помощью JavaScript, но после отправки формы параметры раскрывающегося списка исчезают. Вот HTML-код раскрывающегося списка: [code] class="absolute z-10 mt-1 w-full bg-white shadow-lg max-h-60 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm" wire:ignore.self>
[/code] Проблема в том, что я не могу использовать последнюю версию Alpine.js с @livewireScripts, поскольку я использую библиотеку, включающую Alpine v2.8. К сожалению, я не могу извлечь необходимый код Alpine.js из библиотеки, поскольку он весь перемешан. Все работает нормально, пока форма не будет отправлена и компонент Livewire не обновится, после чего раскрывающийся список исчезнет. Это код интерфейса: [code] Mention roles
Select roles
let isDropdownInitialized = false; // Flag to track if dropdown is initialized
function initializeDropdown(roles) { console.log('Initializing dropdown with roles:', roles); // Debug: Check roles passed to the function
// Function to create dropdown items function createDropdownItems() { console.log('Creating dropdown items'); // Debug: Track when dropdown items are created dropdown.innerHTML = ''; // Clear previous dropdown items
roles.forEach(role => { console.log('Creating item for role:', role); // Debug: Track each role being added
// Toggle selection of a role function toggleOption(role) { console.log('Toggling selection for role:', role); // Debug: Track role selection toggle const index = selectedOptions.findIndex(selected => selected.id === role.id); if (index !== -1) { selectedOptions.splice(index, 1); } else { selectedOptions.push(role); } updateDisplayText(); createDropdownItems(); updateSelectedRolesInput(); }
// Update the displayed text of selected roles function updateDisplayText() { console.log('Updating display text with selected options:', selectedOptions); // Debug: Track selected options displayText.textContent = selectedOptions.length ? selectedOptions.map(option => option.name) .join(', ') : 'Select roles'; }
// Update the hidden input field with selected roles function updateSelectedRolesInput() { const selectedIds = selectedOptions.map(option => option.id).join(','); selectedRolesInput.value = selectedIds; selectedRolesInput.dispatchEvent(new Event('input')); console.log('Updated selected roles input:', selectedIds); // Debug: Track updated input value }
// Initialize the dropdown items createDropdownItems();
// Close the dropdown if clicked outside document.addEventListener('click', function(event) { if (!dropdownContainer.contains(event.target) && dropdown.style.display === 'block') { console.log('Closing dropdown (clicked outside)'); // Debug: Track dropdown close action dropdown.style.display = 'none'; } }); }
document.addEventListener('livewire:initialized', () => { @this.on('send-message', (data) => { console.log('Message sent!'); // Debug: Track when message is sent console.log('Roles:', data.roles); // Debug: Check roles passed roles = data.roles; // Assign the roles to the roles variable initializeDropdown(roles); // Reinitialize the dropdown with the new roles }); });
document.addEventListener('DOMContentLoaded', () => { console.log('Document loaded'); // Debug: Track when the page is loaded // Initialize dropdown when the page is loaded initializeDropdown( @json($roles)); // Assuming @json($roles) is available in the page });