Existe uma função oposta de preventDefault () em JavaScript?
-
18-09-2019 - |
Pergunta
Conto palavras em um campo de texto e depois de uma certa quantidade de palavras, eu uso evitar padrão. No mais, eu gostaria de reativar os comandos padrão.
O preventDefault(
) têm uma função oposta?
Aqui está um código de exemplo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>preventDefault</title>
<style type="text/css"></style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var wordNum = 3;
var input_length;
$("#max").text("max word(s): " + wordNum);
$("#test").keypress(function(event) {
input_length = $.trim($(this).val())
.replace(/\s+/g, " ")
.split(' ').length;
if (input_length > (wordNum - 1)) {
event.preventDefault();
} else {
return true;
}
});
});
</script>
</head>
<body>
<div id="max"></div>
<textarea id="test" cols="20" rows="5"></textarea>
</body>
</html>
Parece que funciona no IE, mas o Firefox não gosta disso.
Solução
Eu acho que o problema que você tem é que você não está procurando a tecla delete. não preventDefault não cancelar o manipulador de eventos todos juntos. Mas com o seu código uma vez que você acertar o comprimento máximo de seu campo o usuário não poderá mais excluir quaisquer caracteres porque a pressão de tecla de apagar está sendo cancelado.
A razão que funciona no IE é porque o IE não dispara o evento de teclado para apagar, fim, entrar, escape, teclas de função, casa, inserção, PageUp / Down e guia. No Safari o código de acesso para excluir está incorreto no evento de teclado.
Por estas razões, têm uma dupla sugestão; Primeiro, use o evento keydown em vez de modo que você obtenha os keycodes corretas.
Em segundo lugar, olhar para o código de acesso e se é de exclusão ou de retrocesso então não preventDefault.
if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
return false;
} else {
return true;
}
Outras dicas
não deve
if maxwords
preventDefault
else
return true
fazer o truque?
simplesmente usar return true;
no final do seu eventHandler. Que borbulhava o evento para o navegador.
Não se parece com ele, https://developer.mozilla.org/en/ DOM / evento , mas você pode apenas não chamá-lo ...
$("#delete_button").click(function(e){
var category = $("#category").val();
var answer = confirm("Are you sure you would like to delete the " + category + " category?");
if (!answer)
e.preventDefault();
});