在GridView TemplateField TextBox中,回车键的执行方式与选项卡类似

In GridView TemplateField TextBox enter key performs like tab

本文关键字:方式 执行 选项 TemplateField GridView TextBox 回车      更新时间:2023-09-26

我有一个GridView,它有一个TemplateField,里面有一个TextBox。唯一的问题是它会跳过下一个TextBox,然后转到该TextBox。奇怪的是,每次按下回车键都会跳过一个文本框。我对Javascript的了解还不足以修复它。有人能看看我的代码吗?

我的Javascript:

function tabE(obj, e) {
     var e = (typeof event != 'undefined') ? window.event : e;// IE : Moz
     if (e.keyCode == 13) { // 9 for Tab and 13 for enter
         var ele = document.forms[0].elements;
         for (var i = 0; i < ele.length; i++) {
             var q = (i == ele.length - 1) ? 0 : i + 2;
             if (obj == ele[i]) {
                 //focus TextBox on next row
                 ele[q].focus();
                 break
             }
         }
         e.returnValue = false;
         if (typeof event == 'undefined')
             e.preventDefault();
     }
 }

我的GridView

 <asp:GridView ID="gvPackRegular" AutoGenerateColumns="false" ShowHeaderWhenEmpty="true"
                                                            CssClass="GridView" runat="server" Width="100%">
                                                            <AlternatingRowStyle CssClass="alt" />
                                                            <Columns>
                                                                <asp:TemplateField HeaderText="Carton" HeaderStyle-CssClass="GridViewHeader">
                                                                    <ItemTemplate>
                                                                        <asp:Label ID="lblPackName" runat="server" Text='<%# Eval("CartonType.Description") %>'></asp:Label>
                                                                        <asp:Label ID="lblCartonTypeID" runat="server" Text='<%# Eval("CartonType.CartonTypeId") %>'
                                                                            Visible="false"></asp:Label>
                                                                    </ItemTemplate>
                                                                </asp:TemplateField>
                                                                <asp:TemplateField HeaderText="Quantity" HeaderStyle-CssClass="GridViewHeader">
                                                                    <ItemTemplate>
                                                                        <asp:TextBox ID="txtPackQty" runat="server" Text='<%# Bind("Pack") %>' CssClass="SmallTextbox"
                                                                            onchange="invalidate();" onfocus="selectTextonFocus(this);" onkeydown="tabE(this,event)"></asp:TextBox>
                                                                    </ItemTemplate>
                                                                </asp:TemplateField>
                                                            </Columns>
                                                        </asp:GridView>

问题出现在i+2

更改

var q = (i == ele.length - 1) ? 0 : i + 2;

var q = (i == ele.length - 1) ? 0 : i + 1;