由于某些原因,我的setfocus()事件都没有在我的web ap的服务器端工作,所以我创建了一个javascript函数setfocus,它被设置为触发body标签的onload事件。
<body onload="SetFocus()">
用户将单击一个单选按钮,启用下拉菜单。他们从下拉菜单中选择启用文本框。当他们将条形码扫描到文本框中时,它将自动跳出字段,因此触发onchange事件以调用一些服务器端代码,如果成功完成SQL插入,则会向gridview插入一个新行,它应该通过javascript自动将焦点设置回文本框。一旦该gridview对象具有多个标题和一行数据,我就会禁用下拉列表和单选按钮列表,所以如果你查看下面的javascript,我就不能再将它们用作if语句中的标准了。
使用Javascript:
var MatAllRB = document.getElementById("HF_RB_MatAll").value;
var MatAllCL = document.getElementById("DD_SelectCL_All").value;
var MatAll = document.getElementById("Txt_MatBC_All");
var MatAllPrompt = document.getElementById("HF_AllPrompt").value;
var count = $("#GV_Scan_All tr").children().length;
这非常有效:
else if (ActiveTab == "cont-3" && MatAllRB != "" && MatAllCL != "")
{ alert("went into setfocus");
document.getElementById("Txt_MatBC_All").focus();
alert("made it through setfocus");
}
这仅适用于您实际单击该字段,该选项卡不起作用。它什么都不做
else if (ActiveTab == "cont-3" && count == 9)
{ alert("went into setfocus");
document.getElementById("Txt_MatBC_All").focus();
alert("made it through setfocus");
}
这与上面的内容相同
else if (ActiveTab == "cont-3" && (MatAllPrompt == "RP" || MatAllPrompt == "P03"))
{ alert("went into setfocus");
document.getElementById("Txt_MatBC_All").focus();
alert("made it through setfocus");
}
奇怪的是,我在这里所有这些警报都正确显示,它从不设置焦点。我对这个东西还很新,所以也许我错过了一些东西,但是我无法弄清楚为什么focus()可以用来点击而不是标签。任何帮助将不胜感激。
这是HTML
<asp:RadioButtonList runat="server" ID="RB_Mat_All" AutoPostBack="true" RepeatColumns="4" OnSelectedIndexChanged="RB_Mat_All_OnSelectedIndexChange">
<asp:ListItem Text="NC" value="NC"></asp:ListItem>
<asp:ListItem Text="DA" value="DA"></asp:ListItem>
<asp:ListItem Text="GW" value="GW"></asp:ListItem>
<asp:ListItem Text="PC" value="PC"></asp:ListItem>
</asp:RadioButtonList>
<asp:HiddenField runat="server" ID="HF_RB_MatAll"></asp:HiddenField >
<br />
<asp:DropDownList runat="server" ID="DD_SelectCL_All" AutoPostBack="true" OnSelectedIndexChanged="DD_SelectCL_All_OnSelectedIndexChange">
<asp:ListItem Value="" Text="Select..."></asp:ListItem>
<asp:ListItem value="53" text="05"></asp:ListItem>
<asp:ListItem value="54" text="06"></asp:ListItem>
<asp:ListItem value="55" text="07"></asp:ListItem>
<asp:ListItem value="57" text="08"></asp:ListItem>
<asp:ListItem value="58" text="09"></asp:ListItem>
</asp:DropDownList>
<asp:label runat="server" ID="Lbl_All_Prompt" CssClass="Form" Text=""></asp:label>
<asp:HiddenField runat="server" ID="HF_AllPrompt"></asp:HiddenField >
<asp:TextBox runat="server" ID="Txt_MatBC_All" Cssclass="Form" Text="" AutoPostBack="true" OnTextChanged="Txt_MatBC_All_TextChanged"></asp:TextBox>
<asp:GridView runat="server" ID="GV_Scan_All" CssClass="Form_Feedback"></asp:GridView>
当我查看来源时,文本框如下所示:
<input name="Txt_MatBC_All" type="text" onchange="javascript:setTimeout('__doPostBack(\'Txt_MatBC_All\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="Txt_MatBC_All" class="Form" />
答案 0 :(得分:1)
奇怪的是,您可以点击该字段并且它可以正常工作,但是标签关闭则不然。尝试将tabIndex添加到页面上的输入中。
答案 1 :(得分:0)
您的文本框的ID,在asp.net呈现页面时更改。所以试试这个动态获取id并查看它是否有效。
document.getElementById("<%=Txt_MatBC_All.ClientID%>").focus();
您必须在所使用的每个 getElementById 上使用ClientID。
顺便说一下,在每一行上你都会聚焦同一个文本控件( Txt_MatBC_All )。如果是这种情况,为什么要做到这一切,只需使用一行。
alert(document.getElementById("<%=Txt_MatBC_All.ClientID%>"));
答案 2 :(得分:0)
尝试将JavaScript转换为方括号表示法。例如:document.forms[0].Txt_MatBC_All.focus();