Qual é o propósito do método preventDefault()?
Vamos aprender sobre o propósito do método
preventDefault() em eventos.
Todo evento que é disparado no DOM possui algum tipo de comportamento padrão. O evento click em uma caixa de seleção alterna o estado dessa caixa de seleção, por padrão. Pressionar a barra de espaço em um botão focado ativa o botão. O método preventDefault() nesses objetos de evento impede que esse comportamento aconteça.
Vamos dar uma olhada em um exemplo. Vamos definir um elemento input para o usuário digitar:
<link rel="stylesheet" href="styles.css">
<label>Enter some characters:
<input type="text">
</label>
label {
display: flex;
flex-direction: column;
font-family: Arial, sans-serif;
font-size: 14px;
color: #333;
margin-bottom: 12px;
}
input[type="text"] {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 14px;
margin-top: 4px;
width: 100%;
box-sizing: border-box;
transition: border-color 0.2s, box-shadow 0.2s;
}
input[type="text"]:focus {
border-color: #0078d4;
box-shadow: 0 0 3px rgba(0, 120, 212, 0.5);
outline: none;
}
E se olharmos para o resultado, podemos digitar no campo de entrada como esperado. Mas talvez não queiramos isso. Talvez, em vez disso, queiramos mostrar o caractere que o usuário digita em um elemento separado. Primeiro, vamos definir nosso elemento para isso:
<link rel="stylesheet" href="styles.css">
<label>Enter some characters:
<input type="text">
</label>
<p id="output"></p>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
label {
font-size: 1.2rem;
color: #333;
margin-bottom: 1rem;
display: flex;
flex-direction: column;
}
input[type="text"] {
padding: 0.5rem;
font-size: 1rem;
border: 2px solid #ccc;
border-radius: 5px;
margin-top: 0.5rem;
outline: none;
}
input[type="text"]:focus {
border-color: #007BFF;
}
#output {
margin-top: 1rem;
font-size: 1.1rem;
color: #555;
}
E então, precisamos conectar ao evento keydown para escutar quando um caractere é digitado no teclado. Observe que não queremos os eventos change ou input aqui, porque precisamos das informações do teclado.
const input = document.querySelector("input");
input.addEventListener("keydown", (e) => {
})
O evento keydown é disparado quando você pressiona uma tecla do teclado. Quando isso acontecer, vamos exibir o caractere no nosso elemento p.
<link rel="stylesheet" href="styles.css">
<label>Enter some characters:
<input type="text">
</label>
<p id="output"></p>
<script src="index.js"></script>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
label {
font-size: 1.2rem;
color: #333;
margin-bottom: 1rem;
display: flex;
flex-direction: column;
}
input[type="text"] {
padding: 0.5rem;
font-size: 1rem;
border: 2px solid #ccc;
border-radius: 5px;
margin-top: 0.5rem;
outline: none;
}
input[type="text"]:focus {
border-color: #007BFF;
}
#output {
margin-top: 1rem;
font-size: 1.1rem;
color: #555;
}
const input = document.querySelector("input");
const output = document.getElementById("output");
input.addEventListener("keydown", (e) => {
output.innerText = You pressed the ${e.key} key;
});
e.key fornece o valor da tecla pressionada, como a para a tecla a ou Enter para a tecla Enter.
Com o código acima, quando você digitar no input, o caractere que você digitar será exibido no elemento p.
Isso é ótimo, mas não queremos mostrar os caracteres no input também. É aqui que nosso método preventDefault() entra em ação. O comportamento padrão de um keydown é renderizar o caractere na entrada. Vamos evitar isso chamando e.preventDefault():
<link rel="stylesheet" href="styles.css">
<label>Enter some characters:
<input type="text">
</label>
<p id="output"></p>
<script src="index.js"></script>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
label {
font-size: 1.2rem;
color: #333;
margin-bottom: 1rem;
display: flex;
flex-direction: column;
}
input[type="text"] {
padding: 0.5rem;
font-size: 1rem;
border: 2px solid #ccc;
border-radius: 5px;
margin-top: 0.5rem;
outline: none;
}
input[type="text"]:focus {
border-color: #007BFF;
}
#output {
margin-top: 1rem;
font-size: 1.1rem;
color: #555;
}
const input = document.querySelector("input");
const output = document.getElementById("output");
input.addEventListener("keydown", (e) => {
e.preventDefault();
output.innerText = You pressed the ${e.key} key;
});
E assim, você evitou o comportamento padrão para permitir que você implemente seu próprio tratamento de eventos personalizado.
Outro exemplo comum de quando usar o método e.preventDefault está relacionado a envios de formulários. Por padrão, enviar um formulário envia dados para o servidor e recarrega a página. Usar e.preventDefault() previne que isso aconteça.
const form = document.querySelector("form");
form.addEventListener("submit", (e) => {
e.preventDefault();
// rest of code goes here
});
Prevenir o comportamento padrão é ótimo quando você precisa de mais controle sobre como um usuário interage com a página, mas é importante ter em mente aspectos como acessibilidade – seu comportamento personalizado deve fornecer os mesmos recursos que o padrão.Este módulo não possui perguntas. Marque como concluído.