jQuery / Método / .click() - Executar ações ao clicar
No jQuery, .click(handler) registra uma função para o clique, enquanto .click() sem argumento aciona o evento. Em código novo, registre com .on("click", handler) e acione com .trigger("click"). Delegue a um pai persistente para atender também botões incluídos depois.
Separar registro e acionamento na migração
A documentação de .click() marca a API como obsoleta desde o jQuery 3.3. Isso não significa removida: a comparação entre as formas funcionou em 3.7.1 e 4.0.0. O código novo segue as alternativas documentadas .on() e .trigger().
| Objetivo | Atalho antigo | Forma recomendada |
|---|---|---|
| Registrar nos elementos atuais | .click(handler) | .on("click", handler) |
| Acionar pelo código | .click() | .trigger("click") |
| Incluir descendentes futuros | Registro direto nos elementos existentes não basta | Pai .on("click", seletor descendente, handler) |
handler é a função executada no evento. Passe sua referência, sem chamar handler() imediatamente. O registro direto exige elementos existentes; o exemplo escolhe um pai persistente após a preparação do documento.
Exemplo completo de clique, acionamento e remoção
Salve todo o código em UTF-8 como click-demo.html e abra no navegador. Não é necessário instalar nada, mas é preciso internet para carregar o arquivo oficial do jQuery pela rede de distribuição de conteúdo, ou CDN. Usa 4.0.0. Cliques, inclusão, novo registro, remoção e restauração foram executados com 3.7.1 e 4.0.0.
Alpha e o futuro Beta são os botões contados. Os demais controlam o exercício. Cada acionamento mostra o nome, incrementa o total e alterna o destaque. Todos têm type="button" para evitar enviar acidentalmente um formulário que os contenha.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Click handlers and delegated events</title>
<style>
body { font: 16px/1.6 sans-serif; margin: 24px; }
button { padding: 10px; margin: 4px; }
.item.selected { outline: 3px solid #b66b00; background: #fff3cf; }
#items { border: 1px solid #ccc; padding: 12px; }
</style>
<script src="https://code.jquery.com/jquery-4.0.0.min.js"></script>
</head>
<body>
<h1>Click handlers and delegated events</h1>
<div id="items">
<button type="button" class="item" id="first"><span>Alpha</span></button>
</div>
<button type="button" id="add">Add Beta</button>
<button type="button" id="trigger">Trigger Alpha</button>
<button type="button" id="bind">Enable or rebind</button>
<button type="button" id="stop">Stop demo handler</button>
<button type="button" id="reset">Reset</button>
<p>Handler: <span id="status"></span></p>
<p id="result" aria-live="polite"></p>
<script>
$(function () {
let clicks = 0;
let last = "none";
function render() {
$("#result").text(`last=${last} | clicks=${clicks}`);
}
function handleClick(event) {
clicks++;
last = $(this).text();
$(this).toggleClass("selected");
render();
}
function bind() {
$("#items").off("click.demo", ".item")
.on("click.demo", ".item", handleClick);
$("#status").text("enabled");
}
$("#add").on("click", function () {
if (!$("#second").length) {
$("<button>").attr({ type: "button", id: "second" })
.addClass("item").text("Beta").appendTo("#items");
}
});
$("#trigger").on("click", () => $("#first").trigger("click"));
$("#bind").on("click", bind);
$("#stop").on("click", function () {
$("#items").off("click.demo", ".item");
$("#status").text("stopped");
});
$("#reset").on("click", function () {
$("#second").remove();
$("#first").removeClass("selected");
clicks = 0;
last = "none";
bind();
render();
});
bind();
render();
});
</script>
</body>
</html>
Inicialmente, Handler mostra enabled e o resultado é:
last=none | clicks=0
- Alpha produz
last=Alpha | clicks=1e destaque. Trigger Alpha aciona o mesmo botão por código: o total passa a 2 e o destaque é removido. - Add Beta e depois Beta produzem
last=Beta | clicks=3. Conferir o ID second impede duplicatas. - Use várias vezes Enable or rebind e uma vez Alpha: o total passa a 4. O registro repetido não multiplica o incremento.
- Stop demo handler mostra stopped. Os botões de tarefa deixam de alterar o contador e o destaque do exercício. Enable or rebind retoma o funcionamento.
- Reset remove Beta e o destaque de Alpha, zera o contador e ativa o manipulador. Alpha volta a começar em 1.
Botões dinâmicos, this e event.target
A delegação com .on() registra em #items e trata cliques dos descendentes .item. Usa a propagação aos pais, chamada bubbling; Beta não precisa de novo registro. Um código que interrompa a propagação pode impedir o evento de alcançar o manipulador delegado.
Na função comum handleClick, this corresponde ao botão que satisfaz .item. Ao clicar no span de Alpha, event.target pode ser span, mas this continua sendo o botão e permite mudar sua classe inteira. Não substitua essa função por uma arrow function sem considerar this. Botões nativos também permitem ativação por Enter depois de receberem foco.
Remover apenas o manipulador necessário
.off() recebe o namespace do evento e o mesmo seletor delegado para retirar o tratamento do exercício. Em click.demo, click é o tipo e demo identifica o grupo. .off("click.demo", ".item") antes do registro mantém uma execução após repetir Enable or rebind.
Um .off() sem argumentos no pai pode remover manipuladores de outras funções. Limite o escopo. Reset limpa apenas o item acrescentado, o destaque e o contador do exercício antes de ativar seu manipulador novamente.
Comparar .click() antigo e seu substituto
Execute este trecho no console de desenvolvimento. Dois botões temporários, sem inserção na página, comparam as formas. Cada um executa uma vez:
let legacy = 0;
const $old = $("<button>").click(() => legacy++);
$old.click();
console.log(legacy);
let modern = 0;
$("<button>").on("click", () => modern++).trigger("click");
console.log(modern);
1
1
.trigger() executa o processamento registrado e pode se propagar. Não reproduz perfeitamente uma ação real; não suponha equivalência em operações que exigem ativação do usuário no navegador. O exercício compara apenas contador e classes de botões comuns.
Se não responder, confira jQuery em Network, erros e versão em Console, os seletores, a existência do pai ao registrar e Stop. Se um clique causar várias execuções, examine a inicialização repetida e o escopo de remoção.




