Pregunta

Estoy contando las palabras en un campo de texto y después de una cierta cantidad de palabras, utilizo evitar un impago. En el mundo, me gustaría volver a habilitar los comandos predeterminados.

¿Tiene preventDefault() tiene una función opuesta?

Aquí hay algunos ejemplos de código:

<!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 en IE, Firefox, pero no le gusta.

¿Fue útil?

Solución

Creo que el problema que tiene es que no se está buscando la tecla de borrar. PreventDefault no cancela el controlador de eventos todos juntos. Pero con su código una vez que llega la longitud máxima de su campo el usuario ya no será capaz de eliminar todos los caracteres debido a que la pulsación de tecla de borrado se está cancelando.

La razón funciona en IE es porque el IE no se dispara el evento de pulsación de tecla Supr, Fin entrar, escape, teclas de función, hogar, de inserción, PAGEUP / abajo y la lengüeta. En Safari para borrar el código clave no es correcta en el caso de pulsación de tecla.

Por estas razones por las que tienen un doble sugerencia; En primer lugar, utilizar el evento KeyDown lugar para que usted obtenga los códigos de teclas correctas.

En segundo lugar, mira el código clave y si es eliminar o retroceso entonces no preventDefault.

if ((event.keyCode != 46 && event.keyCode != 8) || input_length > (wordNum - 1)) {
    return false;
} else {
    return true;
}

Otros consejos

No debería

if maxwords
   preventDefault
else
   return true

hacer el truco?

simplemente utilizar return true; al final de su eventHandler. Eso haría propagarse por el evento para el navegador.

No parece que, https://developer.mozilla.org/en/ DOM / evento , pero que sólo puede no llamarlo ...

$("#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();
        });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top