我尝试在asp中完成一个类似Combobox的外观(它是一个UserControl)。
有一个文本框,您在其中键入一个客户名称,下面显示一个名称相同的列表框。我在键码事件上使用javascript触发隐藏按钮。
我想通过向上/向下箭头浏览列表框并接受我在返回按钮上的选择,该部分有效。但是如果你用鼠标点击一个条目,我也想接受一个选择。
<script type="text/javascript">
function isKeyPressedA(event)
{
event = event || window.event;
if (event.keyCode != 40 && event.keyCode != 9 && event.keyCode != 13){
document.getElementById('btnADrop').click();
bMouseClick = false;
document.getElementById('Alistbox').AutoPostBack = false;
}
else if (event.keyCode == 13) {
document.getElementById('btnEnter').click();
}
else if (event.keyCode == 40) {
document.getElementById('btnASelect').click();
}
}
<asp:TextBox runat="server" ID="Atextbox" onKeyUp="isKeyPressedA(event)" Width="250px" autocomplete="off" ClientIDMode="Static" placeholder="Name oder Email" TabIndex="3" />
<asp:UpdatePanel runat="server" UpdateMode="Conditional" RenderMode="Inline" ChildrenAsTriggers="true" ID="divADrop" >
<ContentTemplate>
<asp:Label runat="server" ID="lblAError" Text="User nicht Vorhanden, bitte E-mail eintragen." style="color:red; display:none; " ></asp:Label>
<asp:Panel runat="server" DefaultButton="btnEnter">
<asp:ListBox runat="server" ID="Alistbox" ClientIDMode="Static" Width="250px" Style="display: none;" OnSelectedIndexChanged="Alistbox_SelectedIndexChanged" ></asp:ListBox> <%--onchange="javascript: return Changed( this );"--%>
<asp:Button runat="server" ID="btnADrop" Text="" ClientIDMode="Static" OnClick="btnADrop_Click" Style="display: none;" />
<asp:Button runat="server" ID="btnEnter" Text="" ClientIDMode="Static" OnClick="btnEnter_Click" Style="display: none;" />
</asp:Panel>
<asp:Button runat="server" ID="btnASelect" Text="" ClientIDMode="Static" OnClick="btnASelect_Click" Style="display: none;" />
<asp:Label runat="server" ID="lblAID" ClientIDMode="Static" Style="display: none;" ></asp:Label>
<asp:Label runat="server" ID="lblAName" ClientIDMode="Static" Style="display: none;"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnADrop" />
<asp:PostBackTrigger ControlID="btnEnter" />
</Triggers>
</asp:UpdatePanel>
我知道我需要AutoPostBack = "true"
在鼠标点击时触发OnSelectedIndexChanged
事件,但我无法通过向上/向下箭头键进入列表,因为它会立即重新加载。
如果条目被接受,则会在文本框Atextbox
中加载用户名,并在标题lblAName
中加载,并将所选值加载到lblAID
。 btnADrop
实时加载列表框上的KeyPressed,btnEnter
在返回时接受选定的值。 btnASelect
只关注列表框并将所选索引设置为零。
是否可以同时完成(键盘和鼠标选择)?