我有一个文本框,它可以更改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>
因此,在后面的代码中,我将下拉列表绑定到页面加载上。Code_TextChanged事件只是重新绑定了下拉菜单。我希望这在每次按键时都发生,而不是在文本框失去焦点时发生。
我最近继承了此代码,这对我而言并不是理想的方法,但是由于时间限制,我无法使用Web服务方法来重写此代码。
我尝试使用jQuery绑定“ keyup”事件以匹配文本框的“ change”事件,但这仅适用于按下的第一个键。
这样可以解决您的问题。逻辑与Kyle建议的解决方案相同。
看看这个。
<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"); }
我添加了其他文本框以查看操作中的更改,请删除该文本框。