javascript - 在 GridView TemplateField TextBox 中,输入键的执行方式与 Tab 类似

标签 javascript asp.net

我有一个 GridView,其中有一个 TemplateField,其中有一个 TextBox。我发现代码允许用户按 Enter 并转到网格中的下一个文本框,就像 Tab 键一样。唯一的问题是它跳过下一个文本框并转到之后的文本框。奇怪的是,每次按 Enter 时它都会跳过文本框。我对 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;

关于javascript - 在 GridView TemplateField TextBox 中,输入键的执行方式与 Tab 类似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38664970/

相关文章:

asp.net - 获取 ASP.NET 表单名称

asp.net - 提出更好的 ASP.NET 部署策略

c# - 递归类型的 ASP.Net 响应为空

javascript - 如何在克隆新样式时从 HTML 表中删除三种样式

javascript - 如何将括号参数与正则表达式匹配?

c# - asp :Panel runat ="server" not available in C# . cs 代码页

css - 如何在 asp.NET/css 中淡入淡出文本

javascript - 如何构造原型(prototype)以使函数上下文不引用 `prototype` 对象

javascript - 使用 CefSharp 将字符串/JSON 从 C# 传递到 JS

javascript - IE edge 不会用日期预填充标签,而 Firefox 和 chrome 会