onKeypress在文本字段中输入Key事件在Chrome中不起作用

时间:2012-02-14 22:02:45

标签: javascript jquery asp.net

我有一个与the one asked here相同的问题,关于如何在chrome中处理回车键。

我想要完成的效果是允许enter键在焦点位于当前字段内时调用一个按钮的单击事件。为此,我使用以下代码:

的javascript:

 <script type="text/javascript">
//attempting to capture keypress for chrome here but this is not working
        $("#txtContainer").keypress(function (e) {
            if (e.keyCode == '13') {
                e.preventDefault();
                doClick(buttonname, e);
                return false;
            }
        });

        function doClick(buttonName, e) {

            var key;
            if (window.event)
                key = window.event.keyCode;     //IE
            else
                key = e.which;     //firefox

            if (key == 13) {
                var btn = document.getElementById(buttonName);
                if (btn != null) { 
                    btn.click();
                    event.keyCode = 0
                } 
            }
        }
</script>

在aspx中

 <form id="form1" runat="server">
    <div>
    <asp:LinkButton ID="newBtn" runat="server" OnClick="btnLogin_Click" Text="ASP Link" />
    <asp:TextBox ID="txtContainer" runat="server" Width="100" />
    <asp:Label ID="time_lbl" runat="server" />
    </div>
    </form>

并在后面的代码中 aspx.cs

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                txtContainer.Attributes.Add("onKeyPress", "doClick('" + newBtn.ClientID + "',event)");
            }

        }       

        public void btnLogin_Click(object sender, EventArgs e)
        {
            time_lbl.Text = txtContainer.Text;
        }

以上代码在FF和IE中运行良好,但chrome继续提交整个表单,而不是在enterkey上捕获按键。

感谢您提出任何建议。

3 个答案:

答案 0 :(得分:1)

我想说使用'keyup'代替'keypress'可以解决你的问题

答案 1 :(得分:0)

您可以在按键事件中尝试此操作

    $("#txtContainer").keypress(function (e) {
        e.preventDefault();
        var key = window.event ? e.keyCode : e.which;
        if (key == '13') {
            doClick(buttonname, e);
        }
    });

注意:var key = window.event? e.keyCode:e.which;并且应该首先放置e.preventDefault()并返回false;因为你使用了e.preventDefault()。

,所以不是必需的

答案 2 :(得分:-1)

这也应该起到作用:

var key = e.keyCode || e.which;
if(key === 13 { /* your code */ }