Question

Je compte les mots dans un champ de texte et après une certaine quantité de mots, j'utilise éviter par défaut. Dans l'autre, je voudrais réactiver les commandes par défaut.

Est-ce que preventDefault() ont une fonction inverse?

Voici quelques exemples de code:

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

Il semble fonctionner sur IE, Firefox, mais ne l'aime pas.

Était-ce utile?

La solution

Je pense que le problème que vous rencontrez est que vous ne cherchez pas la clé de suppression. PreventDefault ne supprime pas le gestionnaire d'événements tous ensemble. Mais avec votre code une fois que vous frappez la longueur maximale du champ, l'utilisateur ne pourra plus supprimer tous les caractères, car la suppression est keypress annulée.

La raison pour laquelle cela fonctionne dans IE est parce que IE ne se déclenche pas l'événement pour keypress suppression, à la fin, entrez, évasion, touches de fonction, à la maison, insérer, pageUp / vers le bas et l'onglet. Dans Safari le code d'activation pour suppression est incorrect dans l'événement keypress.

Pour ces raisons, j'ai une suggestion double; Tout d'abord, utiliser l'événement keydown à la place afin que vous obtenez les keycodes correctes.

Deuxièmement, regardez le code d'activation et si elle est de supprimer ou backspace alors ne preventDefault.

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

Autres conseils

Si pas

if maxwords
   preventDefault
else
   return true

faire l'affaire?

utilisez simplement return true; à la fin de votre eventHandler. Ce serait bouillonner l'événement au navigateur.

Ne regardez pas comme ça, https://developer.mozilla.org/en/ DOM / événement , mais vous pouvez simplement ne pas l'appeler ...

$("#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();
        });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top