web-dev-qa-db-ja.com

JavaScriptにpreventDefault()の反対の関数はありますか?

テキストフィールドの単語を数えていますが、一定量の単語の後、preventdefaultを使用します。それ以外の場合は、デフォルトのコマンドを再利用したいと思います。

PreventDefault()には反対の関数がありますか?

サンプルコードは次のとおりです。

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

IEで動作するようですが、Firefoxはそれを好みません。

20
Wilkins

あなたが抱えている問題は、削除キーを探していないことだと思います。 Preventdefaultは、イベントハンドラーをまとめてキャンセルしません。ただし、コードを使用すると、フィールドの最大長に達すると、削除キーの押下がキャンセルされるため、ユーザーは文字を削除できなくなります。

IEで機能する理由は、IEは、削除、終了、入力、エスケープ、ファンクションキー、ホーム、挿入、pageUpのキー押下イベントを発生させないためです/ Down andtab。Safariでは、keypressイベントで削除のキーコードが正しくありません。

これらの理由から、私には2つの提案があります。まず、代わりにkeydownイベントを使用して、正しいキーコードを取得します。

次に、キーコードを確認し、それが削除またはバックスペースの場合は、preventDefaultを使用しないでください。

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

すべきではない

if maxwords
   preventDefault
else
   return true

トリックをしますか?

8
Les

eventHandlerの最後にreturn true;を使用するだけです。それはブラウザにイベントをバブルアップします。

4

見た目は違いますが、 https://developer.mozilla.org/en/DOM/event ですが、呼び出さないでください.。

3
Kobi
$("#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();
        });
2
Jon