阻止表单提交和命中键盘事件处理程序不起作用

时间:2012-10-04 07:15:58

标签: javascript forms events submit keypress

跨浏览器有问题。我需要支持IE7-9,我的网站设置为IE7标准 - 无法更改。然后我需要支持最新的chrome,safari和firefox。

我想在输入的文本框中点击一个keyup事件。问题是我在该页面上的表单中添加了一个按键事件,该表单正在提交我不希望发生的表单。 样本申请就是这样。

JAVASCRIPT:

$(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() - 没有点击keyup事件,如果我不使用它,页面会回发。

我希望在所有浏览器中按Enter键将“Key up - Enter pressed - input event”写入屏幕。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分: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;

我知道这不是最好的选择,但这是有效的。谢谢大家。