Resolvi. Graças a inteligencia artificial (gemini). A quem interessar. Coloquei este script no evento onload do menu. (obs: meu menu cria as opções dinamicamente)
?>
inicio do script javascript
document.addEventListener(‘DOMContentLoaded’, function() {
setTimeout(function() {
try {
function setupMenuListeners() {
const menuLinks = document.querySelectorAll(’.ae-menubar-accordion [role=“menuitem”][aria-haspopup=“true”]’);
if (menuLinks.length === 0) {
console.warn('Nenhum item de menu com submenu encontrado com o seletor CSS.');
return;
}
menuLinks.forEach(link => {
// Remove o ouvinte anterior (se existir) para evitar duplicações
link.removeEventListener('click', menuClickHandler);
// Adiciona o novo ouvinte
link.addEventListener('click', menuClickHandler);
});
}
function menuClickHandler(event) {
event.preventDefault();
event.stopPropagation();
// Fecha outros menus abertos
const allOpenMenus = document.querySelectorAll('.ae-menubar-accordion [role="menuitem"][aria-haspopup="true"][aria-expanded="true"]');
allOpenMenus.forEach(otherMenu => {
if (otherMenu !== this) {
otherMenu.setAttribute('aria-expanded', 'false');
const submenu = otherMenu.nextElementSibling;
if (submenu && submenu.classList.contains('wrapper')) {
submenu.style.height = '0px';
}
}
});
const self = this; // Salva o 'this' em uma variável
setTimeout(function() { // Adiciona um pequeno atraso
// Corrige a lógica aqui:
const isExpanded = self.getAttribute('aria-expanded') === 'true';
self.setAttribute('aria-expanded', isExpanded ? 'true' : 'false');
const submenu = self.nextElementSibling;
if (submenu && submenu.classList.contains('wrapper')) {
if (!isExpanded) {
submenu.style.height = '100%'; //ou 'auto'
} else {
submenu.style.height = '0px';
}
}
}, 50); // Atraso de 50 milissegundos
const linkText = this.textContent.trim();
}
// Inicializa os listeners
setupMenuListeners();
console.log('Script de menu expandir/colapsar carregado com sucesso.');
} catch (error) {
console.error('Ocorreu um erro no script de menu:', error);
}
}, 2000);
});
Fim do script
<?php