Frage

Ich bin also in einem Textfeld zu zählen und nach einer gewissen Menge von Worten, verwende ich Standard verhindern. Im sonst würde Ich mag die Standardbefehle wieder zu aktivieren.

Hat preventDefault() eine entgegengesetzte Funktion?

Hier ist ein Beispielcode:

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

Es scheint, auf IE zu arbeiten, aber Firefox mag es nicht.

War es hilfreich?

Lösung

Ich denke, das Problem, das Sie haben, ist, dass Sie nicht für die Löschtaste suchen. Prevent nicht abbrechen nicht alle zusammen Event-Handler. Aber mit Ihrem Code, wenn Sie die maximale Länge des Feldes getroffen wird der Benutzer nicht mehr in der Lage sein, alle Zeichen gelöscht werden, da der Lösch keypress abgebrochen wird.

Der Grund ist es in IE funktioniert, weil IE nicht das KeyPress-Ereignis ausgelöst zum Löschen, Ende, geben Sie, Flucht, Funktionstasten, nach Hause, insert, pageUp / Abwärts- und Reiter. In Safari ist der Schlüsselcode zum Löschen nicht korrekt in dem KeyPress-Ereignisse.

Aus diesen Gründen ich einen doppelten Vorschlag habe; Verwenden Sie zuerst das KeyDown-Ereignis statt, so dass Sie die richtigen keycodes erhalten.

Zweitens sehen die Keycode an, und wenn es löschen oder Backspace dann nicht prevent.

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

Andere Tipps

Sollte nicht

if maxwords
   preventDefault
else
   return true

den Trick tun?

einfach return true; am Ende Ihrer Eventhandler verwenden. Das wäre sprudelt das Ereignis an den Browser.

Sieht nicht wie es https://developer.mozilla.org/en/ DOM / Ereignis , aber Sie können nur nicht nennen es ...

$("#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();
        });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top