文本框焦点在asp updatepanel -工作与断点,但不能没有
本文关键字:断点 但不能 工作 焦点 asp updatepanel 文本 | 更新日期: 2023-09-27 17:49:14
我遇到了一个非常奇怪的问题,我的代码在代码中设置了断点,但是当我删除断点时,部分代码停止运行。
我试图使一个文本框选择焦点上的所有文本;我想让它自动对焦,选择所有的文本,当搜索执行。
我有一个文本框(groupSearchTextbox),按钮(groupSearchButton),和一个列表框是在一个更新面板内,面板内的默认按钮指定:
<asp:Panel ID="groupPanel" runat="server" CssClass="listContainer" DefaultButton="groupSearchButton">
<h2>User Groups</h2>
<div class="searches">
<asp:TextBox ID="groupSearchTextbox" runat="server"></asp:TextBox>
<asp:Button ID="groupSearchButton" runat="server" Text="Search" OnClick="groupSearchButton_Click" />
<asp:Button ID="showAllGroupsButton" runat="server" Text="Show All" OnClick="showAllGroupsButton_Click" CssClass="right" />
</div>
<asp:UpdatePanel ID="groupUpdate" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:ListBox ID="groupListbox" runat="server" CssClass="list"></asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="groupSearchButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="showAllGroupsButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</asp:Panel>
我也有一个jquery函数,使文本框选择焦点:
$('.searches input[type=text]').focus(function () {
$(this).select();
});
和groupSearchButton的onclick我有以下函数从列表框中删除项目,如果它们不是搜索的结果,并专注于文本框:
protected void groupSearchButton_Click(object sender, EventArgs e) {
fillGroups(); //Sets the listbox to the original list
string searchString = groupSearchTextbox.Text;`
for (int i = groupListbox.Items.Count - 1; i > 0; i--) {
string itemName = groupListbox.Items[i].ToString();
if (!itemName.ToLower().Contains(searchString.ToLower())) {
groupListbox.Items.Remove(groupListbox.Items[i]);
}
}
groupSearchTextbox.Focus();
}
当我单击groupSearchButton
时,一切都按预期工作。我得到了我的结果,groupSearchTextbox
得到了选定文本的焦点。当我在文本框上按enter键时,利用面板的默认按钮属性,我得到了结果,但文本框中的文本没有被选中。
奇怪的是,如果我在groupSearchButton_Click
方法中设置焦点的地方放置了一个断点,那么上面在文本框中按enter键的方法就会正常工作,并且文本被选中。
你知道这是怎么回事吗?
编辑:我很确定问题是文本框需要失去焦点以便它在再次聚焦时选择文本。这就解释了实际点击按钮工作,以及(我相信)断点问题,因为当Visual Studio显示时,文本框会失去焦点。
我想出了一个相当粗糙的jquery修复这个问题,但仍然想知道是否有一个体面的方法来正确处理这个
如果你想只关注一个文本框,那么你可以使用
<asp:Panel ID="groupPanel" runat="server" CssClass="listContainer" DefaultButton="groupSearchButton" defaultfocus="groupSearchTextbox">
面板您可以在Page_Load
中使用:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
groupSearchTextbox.Focus();
}
}