rlcrews
rlcrews

Reputation: 3562

onKeypress Enter Key event on textfield not working in Chrome

I have a question along the same vein as the one asked here regarding how the enter key is handled in chrome.

The effect I am trying to accomplish is to allow the enter key to call a click event of one a button while focus in within the current field. To accomplish this I am using the following code:

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>

within the 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>

and within the code behind 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;
        }

The above code works fine in FF and IE however chrome continues to submit the entire form vs. capturing the keypress on the enterkey.

Thank you for any suggestions.

Upvotes: 3

Views: 22374

Answers (3)

fr00t
fr00t

Reputation: 679

This should also do the job:

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

Upvotes: 0

The Alpha
The Alpha

Reputation: 146269

You may try this in your keypress event

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

Note: var key = window.event ? e.keyCode : e.which; and e.preventDefault() should be placed at first and return false; is not required because you've used e.preventDefault().

Upvotes: 0

Evan
Evan

Reputation: 6115

I would say that using 'keyup' instead of 'keypress' should solve your problems

Upvotes: 1

Related Questions