Domanda

Conto parole in un campo di testo e dopo un certo numero di parole, io uso evitare di default. Nel resto, vorrei riattivare i comandi di default.

La preventDefault() hanno una funzione opposta?

Ecco alcuni esempi di codice:

<!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>

Sembra funzionare su IE, Firefox ma non piace.

È stato utile?

Soluzione

Credo che il problema che si sta avendo è che non si sta cercando il tasto di cancellazione. PreventDefault non cancella il gestore di eventi tutti insieme. Ma con il codice una volta colpito la lunghezza massima del campo che l'utente non sarà più in grado eliminare tutti i personaggi, perché la pressione del tasto di cancellazione viene annullata.

Il motivo per cui funziona in IE è perché IE non genera l'evento Pressione per eliminazione, fine, entrare, uscire, tasti funzione, HOME, inserire, PaginaSu / Giù e tab. In Safari il codice chiave per la cancellazione non è corretta in caso pressione dei tasti.

Per queste ragioni ho una duplice suggestione; In primo luogo, utilizzare l'evento KeyDown invece in modo da ottenere i codici dei tasti corretti.

In secondo luogo, guardare il codice chiave e se è eliminare o backspace allora non preventDefault.

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

Altri suggerimenti

Non dovrebbe

if maxwords
   preventDefault
else
   return true

fare il trucco?

è sufficiente utilizzare return true; alla fine del vostro EventHandler. Che sarebbe bolla l'evento al browser.

Non sembra che, https://developer.mozilla.org/en/ DOM / evento , ma si può solo non chiamarlo ...

$("#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();
        });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top