Neste artigo você aprenderá a Select2 com HTMX, um recurso frequentemente utilizado com o framework Django

Select2 com HTMX capa

Fala programador(a), beleza? Bora aprender mais sobre HTMX!

Antes de seguir com o artigo, não deixe de conferir nosso curso completo de HTMX!

São mais de 6 horas de aula, do básico ao avançado e com dois projetos completos! Além disso, você tem acesso vitalício, equipe de suporte especializada para te ajudar e certificado de conclusão.

curso completo htmx

O Problema

Quando um elemento <select> é enriquecido com Select2 e configurado para disparar uma solicitação HTMX em sua mudança, a expectativa é que qualquer seleção do usuário resulte em uma ação HTMX correspondente.

Contudo, essa integração direta falha, pois o Select2 manipula os eventos de mudança de uma maneira que não aciona automaticamente os ouvintes de eventos HTMX associados ao elemento original <select>.

Solução Proposta

Para resolver o problema, a solução envolve um pequeno script JavaScript que manualmente dispara o evento de mudança (change) no elemento <select> original, sempre que uma seleção é feita com Select2.

Isso assegura que o HTMX reconheça a mudança e execute a solicitação conforme esperado.

Implementação

A implementação recomendada utiliza o evento select2:select do Select2, que é disparado após a seleção de um item.

O script abaixo deve ser incluído em seu documento HTML ou arquivo JavaScript externo:

window.addEventListener("DOMContentLoaded", () => {
    $('select').each(function () {
        const selectElement = this;
        $(this).on('select2:select', function () {
            selectElement.dispatchEvent(new Event('change'));
        });
    });
});

Esse código escuta o carregamento do DOM e, em seguida, para cada elemento <select> na página, adiciona um ouvinte para o evento select2:select.

Quando o evento é acionado, ele manualmente dispara um evento de mudança no elemento <select> original, garantindo que o HTMX processe a mudança.

Solução Proposta com JavaScript Puro

A solução envolve ouvir diretamente os eventos disparados pelo Select2 e manualmente propagá-los para o elemento <select> original como eventos de mudança, que então podem ser capturados pelo HTMX.

Passo 1: Inicializar o Select2

Primeiramente, é necessário inicializar o Select2. Como estamos evitando jQuery, isso pode ser feito selecionando o elemento <select> com JavaScript puro e aplicando o Select2.

Este passo pode variar dependendo de como o Select2 é integrado ao seu projeto.

document.addEventListener('DOMContentLoaded', function() {
    var selectElements = document.querySelectorAll('.select2');
    selectElements.forEach(function(select) {
        new Select2(select); // Substitua isso pela sua própria inicialização do Select2 sem jQuery, se necessário
    });
});

Passo 2: Detectar Seleção e Disparar Evento de Mudança

Agora, precisamos adicionar um ouvinte para o evento select2:select e disparar um evento de mudança no elemento <select> original.

document.addEventListener('DOMContentLoaded', function() {
    var selectElements = document.querySelectorAll('.select2');

    selectElements.forEach(function(select) {
        select.addEventListener('select2:select', function(event) {
            // Criando e disparando o evento de mudança
            var changeEvent = new Event('change');
            select.dispatchEvent(changeEvent);
        });
    });
});

Note que o 'select2:select' é um evento específico do Select2 usado para detectar quando uma seleção é feita.

Quando esse evento ocorre, criamos e disparamos um novo evento de mudança no elemento <select> original, o qual pode ser capturado e tratado pelo HTMX.

Considerações Adicionais

Para garantir que esse script funcione com o HTMX, é importante que o HTMX já esteja carregado e operacional no momento em que o script é executado.

Isso significa que o script HTMX deve ser carregado antes desse código JavaScript personalizado.

Além disso, se seu elemento <select> for carregado ou modificado dinamicamente após o carregamento inicial da página, você pode precisar ajustar o script para aplicar o ouvinte de eventos a esses novos elementos de forma adequada.

Conclusão

A solução proposta oferece uma maneira eficaz de garantir que os eventos de mudança sejam reconhecidos pelo HTMX, mantendo a funcionalidade avançada do Select2 e a interatividade dinâmica do HTMX.

Esse método reforça a flexibilidade e a potência das aplicações web modernas, nos permitindo a criar interfaces ricas e responsivas com facilidade.

Subscribe
Notify of
guest

0 Comentários
Inline Feedbacks
View all comments