我有一个 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/