【发布时间】:2011-06-10 19:48:08
【问题描述】:
由于某种原因,我的 setfocus() 事件都没有在我的 Web 应用程序的服务器端运行,因此我创建了一个 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" />
【问题讨论】:
-
您尝试过的所有浏览器中的行为是否相同?
-
我只试过 ie,但这是我们在这里唯一被允许使用的浏览器...傻,我知道。
标签: javascript asp.net textbox focus dom-events