在GridView TemplateField TextBox中,输入键执行类似选项卡

时间:2016-07-29 18:04:30

标签: javascript asp.net

我有一个GridView,里面有一个TemplateField,里面有一个TextBox。我发现代码允许用户按Enter键并转到Grid中的下一个TextBox,就像tab键一样。唯一的问题是它跳过下一个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>

1 个答案:

答案 0 :(得分:1)

问题出在i+2

更改

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

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