1

クロスブラウザに問題があります。IE7-9 をサポートする必要があります。私のサイトは IE7 標準に設定されています - 変更できません。次に、最新の chrome、safari、firefox をサポートする必要があります。

入力時にテキストボックスでキーアップイベントをヒットしたい。問題は、発生したくないフォームを送信しているそのページのフォームにキープレスイベントが追加されていることです。サンプル アプリケーションは次のようになります。

ジャバスクリプト:

$(document).ready(function () {

        $("form").bind("keypress", function (e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (code == 13) {
                $("#log1").append("Key press - Form event");
            }                
        });

        $("#myInput1").bind("keypress", function (e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (code != 13) {
                return true;
            }

            $("#log2").append("Enter pressed - input event");

            //if (!e) var e = window.event;

            e.cancelBubble = true;
            e.returnValue = false;

            if (e.stopPropagation) {
                e.stopPropagation();
                //e.preventDefault();
            }

        });

        $("#myInput1").bind("keyup", function (e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (code != 13) {
                return true;
            }

            $("#log1").append("Key up - Enter pressed - input event");
        });


    });​

HTML

<li onkeypress="alert('hi')">
            <input id="myInput1" type="text" />
            <div id="log1"></div>
            <div id="log2"></div>
        </li>

e.preventDefault() を使用すると、キーアップ イベントがヒットしません。使用しないと、ページがポストバックされます。

すべてのブラウザーで、Enter キーを押すと、「キーアップ - Enter が押された - 入力イベント」が画面に書き込まれるようにしたいと考えています。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

最終的には次のようにすることができました:

$(document).ready(function () {
        $("form").bind("keypress", function (e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 13) {
            $("#log1").append("Key press - Form event");
        }                
    });


        $("#myInput1").bind("keypress", function (e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (e.keyCode != 13) {
                return true;
            }

            $("#log2").append("Enter pressed - input event");


            e.stopPropagation();
            sampleE = e.keyCode;
           $("#myInput1").trigger("keyup");
           return false;
        });

        $("#myInput1").bind("keyup", function (e) {
            if (!e.keyCode)
                e.keyCode = sampleE;
            if (e.keyCode != 13) {
                return true;
            }

            $("#log1").append("Key up - Enter pressed - input event");
        });


    });
    var sampleE = null;

これが最良のオプションではないことはわかっていますが、これは機能しています。皆さんありがとう。

于 2012-10-05T09:12:33.447 に答える