Manipulando eventos onclick no jQuery sem $().click e $().live
Resumo Rápido
Para referenciar diretamente o elemento que foi clicado, use o termo coletivo this
no contexto do manipulador onclick
:
<button onclick="alert(this.tagName)">Clique Me</button>
Neste caso, this
refere-se ao elemento <button>
, e exibe o nome da sua tag quando clicado.
Compreendendo event.target e this
No JavaScript, ao lidar com eventos, dois termos-chave—this
e event.target
—desempenham um papel central. this
refere-se condicionalmente ao elemento ao qual o evento está anexado, enquanto event.target
refere-se ao elemento que ativou o evento. Essas duas entidades podem diferir durante a propagação de eventos a partir de um elemento interno.
Manipuladores de Eventos Inline vs. JavaScript Não Intrusivo: Uma Comparação
Inserir JavaScript diretamente no HTML diminui a manutenibilidade do código. Uma abordagem mais moderna é usar JavaScript não intrusivo, onde os eventos são adicionados através de addEventListener
ou attachEvent
, usado em versões mais antigas do Internet Explorer, promovendo uma separação entre estrutura e comportamento.
Problemas de Compatibilidade Entre Navegadores
Garantir compatibilidade com diferentes navegadores requer técnicas especiais:
element.onclick = function(e) {
e = e || window.event; // para navegadores mais antigos
var target = e.target || e.srcElement; // para Internet Explorer
// Tratamento especial para o Internet Explorer.
};
Como resultado, o código fornecido funcionará corretamente mesmo no Internet Explorer.
Vazamentos de Memória: Os Assassinos Invisíveis
Esteja atento a vazamentos de memória, especialmente ao trabalhar com versões mais antigas de navegadores. Desative periodicamente os manipuladores de eventos para liberar recursos do sistema.
Gerenciando Várias Funções de Carregamento
Para lidar com múltiplos manipuladores de carregamento, use addEventListener
, garantindo alta performance e evitando conflitos no escopo global.
Aproveitando ao Máximo o jQuery
jQuery simplifica o trabalho com eventos através do método .on()
e facilita a manipulação do DOM. Você ganha flexibilidade única ao usar o jQuery.
Plano de Ação para JavaScript Não Intrusivo
Para aplicar corretamente o JavaScript não intrusivo:
- Manipule eventos dentro de scripts, deixando o código HTML intacto.
- Use
addEventListener
ou$.on()
para vinculação de eventos. - Evite a inserção direta de JavaScript no HTML.
Visualização
Considere um exemplo com dois botões (🌻
- Botão A, 🌼
- Botão B):
<button onclick="identificarChamador(this)">🌻</button>
<button onclick="identificarChamador(this)">🌼</button>
Quando clicados:
function identificarChamador(chamador) {
alert(`Você clicou em ${chamador.innerText}!`);
}
Como resultado, temos:
Clique em 🌻: "Você clicou em 🌻!"
Clique em 🌼: "Você clicou em 🌼!"
Ambos os botões são únicos e passam seu contexto através do onclick
. 🌼🌻
Seu Guia para Aventuras Empolgantes com onclick
Superando Desafios com Delegação de Eventos
A delegação de eventos é uma técnica eficaz para anexar um único manipulador de eventos a um elemento pai que será acionado para todos os elementos filhos. Isso simplifica o código e economiza recursos do sistema.
document.getElementById('container').addEventListener('click', function(e) {
var elementoClicado = e.target;
if (elementoClicado.tagName === 'BUTTON') {
// Nessa situação, usar delegação simplifica a manipulação de eventos.
}
});
Parâmetros Adicionais em Manipuladores de Eventos
Para passar parâmetros para manipuladores de eventos, utilize funções anônimas ou a função bind()
:
// Função anônima
button.onclick = function() {
manipulador(arg1, arg2);
};
// Função bind
button.onclick = manipulador.bind(null, arg1, arg2);
Recursos Úteis
- Elemento: evento click - Web APIs | MDN
- Método click() do Elemento HTML DOM
- Manipulador de eventos JavaScript com parâmetros - Stack Overflow
- Evento: propriedade currentTarget - Web APIs | MDN
- Propagação e captura
- JavaScript - Ordem dos eventos