1

有什么办法可以延迟下拉列表上的自动回发,直到列表真正失去焦点?我想接受来自键盘的输入,而不在每次击键后回发页面。例如,使用以下代码:

<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>

假设我想选择两个测试。我选择 ddl 并在键盘中输入“tw”。但是,一旦输入“t”,页面就会自动回发,而“w”输入会丢失。重置焦点并没有真正帮助,因为 ddl 认为 'w' 是第一个输入。任何帮助,将不胜感激。

4

2 回答 2

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>
于 2013-01-08T19:03:15.497 回答
0

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

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

于 2013-07-10T00:50:36.030 回答