我有一个TextBox可以更改OnTextChanged事件中的下拉列表的内容。当文本框失去焦点时,这个事件似乎会触发。如何在按键或键盘事件上进行此操作?
以下是我的代码示例
<asp:TextBox ID="Code" runat="server" AutoPostBack="true" OnTextChanged="Code_TextChanged"> <asp:UpdatePanel ID="Update" runat="server"> <ContentTemplate> <asp:DropDownList runat="server" ID="DateList" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Code" /> </Triggers> </asp:UpdatePanel>
所以在codebehind中,我绑定页面加载的下拉列表。 Code_TextChanged事件只是重新绑定下拉列表。我希望这可以在每个按键上发生,而不是当文本框失去焦点时。
我最近继承了这段代码,这不是为我这样做的理想方法,但时间限制阻止我在Web服务方法中重写。
我已经尝试使用jQuery绑定“keyup”事件来匹配文本框的“更改”事件,但这只适用于第一个按键。
解决方法
这将解决您的问题。逻辑与凯尔提出的解决方案相同。
看看这个。
<head runat="server"> <title></title> <script type="text/javascript"> function RefreshUpdatePanel() { __doPostBack('<%= Code.ClientID %>',''); }; </script> <asp:TextBox ID="Code" runat="server" onkeyup="RefreshUpdatePanel();" AutoPostBack="true" OnTextChanged="Code_TextChanged"></asp:TextBox> <asp:UpdatePanel ID="Update" runat="server"> <ContentTemplate> <asp:DropDownList runat="server" ID="DateList" /> <asp:TextBox runat="server" ID="CurrentTime" ></asp:TextBox> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Code" /> </Triggers> </asp:UpdatePanel>
后面的代码就像这样…
protected void Code_TextChanged(object sender,EventArgs e) { //Adding current time (minutes and seconds) into dropdownlist DateList.Items.Insert(0,new ListItem(DateTime.Now.ToString("mm:ss"))); //Setting current time (minutes and seconds) into textBox CurrentTime.Text = DateTime.Now.ToString("mm:ss"); }