我有一个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>
答案 0 :(得分:1)
问题出在i+2
更改
var q = (i == ele.length - 1) ? 0 : i + 2;
要
var q = (i == ele.length - 1) ? 0 : i + 1;