在下拉列表的键盘输入上停止自动后备

时间:2013-01-08 18:51:32

标签: asp.net drop-down-menu autopostback

在列表实际失去焦点之前,有没有办法在下拉列表中延迟自动回复?我希望接受来自键盘的输入,而不会在每次按键后回发页面。例如,请使用以下代码:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem >Test1</asp:ListItem>
<asp:ListItem >Tst1</asp:ListItem>
<asp:ListItem >twotest</asp:ListItem>
</asp:DropDownList>

说我想选择twotest。我选择ddl并输入'tw'到我的键盘。但是,只要输入“t”,页面就会自动回发,而“w”输入则会丢失。重置焦点并没有真正帮助,因为ddl认为'w'是第一个输入。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

似乎不可能。您必须删除AutoPostBack =“true”并尝试其他方式来执行回发。考虑以下解决方案:

当下拉列表 ddlCountry 更改时,会调用函数 ddlCountry_changed ,触发 btnLoad 点击执行回发。按钮 btnLoad 会放在更新面板中,因此页面不会重新加载,您仍然可以关注下拉列表。

<script type="text/javascript">
    function ddlCountry_changed() {
        document.getElementById('<%= btnLoad.ClientID %>').click();
    }
</script>

Country:
<asp:DropDownList ID="ddlCountry" runat="server" onchange="ddlCountry_changed();">
    <asp:ListItem Text="Vietnam" Value="1"></asp:ListItem>
    <asp:ListItem Text="United State" Value="2"></asp:ListItem>
</asp:DropDownList>

<asp:UpdatePanel ID="updatePanel" runat="server">
    <ContentTemplate>
        <asp:Button ID="btnLoad" style="display: none" runat="server" OnClick="btnLoad_OnClick" />
    </ContentTemplate>
</asp:UpdatePanel>

答案 1 :(得分:0)

这比处理模糊要复杂一点。您需要删除onchange属性(AutoPostBack =“false”),以便可以进行键盘导航,并附加通过单击,模糊或按下回车键更改值时提交表单的事件处理程序。

我遇到了同样的问题并创建了一个用于处理此问题的插件。查看https://github.com/bstruthers/AutoPostBack-Fix