jquery - false - ¿Existe una función opuesta de preventDefault() en JavaScript?
stoppropagation (5)
Estoy contando las palabras en un campo de texto y, después de una cierta cantidad de palabras, uso la opción de prevención predeterminada. En el resto, me gustaría volver a activar los comandos predeterminados.
¿Tiene preventDefault () una función opuesta?
Aquí hay un código de ejemplo:
<!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 funcionar en IE, pero a Firefox no le gusta.
Creo que el problema que tiene es que no está buscando la clave de eliminación. Preventdefault no cancela el controlador de eventos por completo. Pero con su código una vez que haya alcanzado la longitud máxima de su campo, el usuario ya no podrá eliminar ningún carácter porque se está cancelando la pulsación de la tecla Eliminar.
La razón por la que funciona en IE es porque IE no dispara el evento de pulsación de tecla para eliminar, finalizar, ingresar, escapar, teclas de función, inicio, insertar, subir / bajar página y pestaña. En Safari, el código clave para eliminar es incorrecto en el evento de pulsación de tecla.
Por estas razones tengo una doble sugerencia; en primer lugar, use el evento keydown en su lugar para obtener los códigos clave correctos.
En segundo lugar, observe el código clave y, si se trata de eliminar o retroceder, no evite el error.
if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
return false;
} else {
return true;
}
No debería
if maxwords
preventDefault
else
return true
Haz el truco ?
No se ve así, https://developer.mozilla.org/en/DOM/event , pero simplemente no puedes llamarlo ...
simplemente use return true;
Al final de tu eventoHandler. Eso impulsaría el evento al navegador.
$("#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();
});