【问题标题】:OnTextChanged loses focus when AutoPostBack is true当 AutoPostBack 为真时 OnTextChanged 失去焦点
【发布时间】:2013-05-31 20:51:01
【问题描述】:

我有一个包含多个文本框的 ASP.Net 网络表单。一些文本框有一个 OnTextChanged 事件,其中 AutoPostBack 设置为 true。

当用户输入一些文本并离开文本框时,我希望运行一些代码。这部分工作正常。

问题在于,如果用户输入一些文本,然后单击或切换到另一个文本框,则当前文本框事件的 OnTextChanged 会正常触发,但用户单击的文本框不会保持焦点。这会导致问题,因为用户认为他们在下一个文本框上,但事实并非如此。而且似乎没有任何物体成为焦点。

在当前文本框的 OnTextChanged 事件触发时,有什么办法可以使下一个对象保持焦点?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    一种选择是使用<asp:UpdatePanel> 控制。

    关于使用它的事实:

    • 回发请求将通过 AJAX 发出。
    • 它不会重新创建整个页面的 HTML。
    • 当 UpdatePanel 更新时,它会替换 DIV innerHTML,这会使文本框失去焦点(坏点)。
    • 要保持焦点,您必须避免在文本框回发时更新 UpdatePanel。
    • 您可以通过设置UpdateModeChildrenAsTriggers 属性来避免更新。

    这是一个例子:

    <asp:UpdatePanel ID="uppTextboxes" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
        <ContentTemplate>
            <asp:TextBox ID="txb1" runat="server" AutoPostBack="true" OnTextChanged="txb1_OnTextChanged" />
            <asp:TextBox ID="txb2" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
    

    【讨论】:

      【解决方案2】:

      由于整个页面在服务器端回发时重新创建,并且浏览器将在客户端重新创建所有 html,因此您必须告诉 ASP.NET 您的TextBox 需要关注。

      使用Page.SetFocus:

      Page.SetFocus(IdOfControl);
      

      但是,如果可以的话,我宁愿不回发。您不能使用用户在输入所有必要数据后必须单击的按钮吗?

      【讨论】:

      • 在 OnTextChanged 运行计算,其他文本框的值已更新。除了我描述的问题之外,该表单效果很好。
      猜你喜欢
      • 1970-01-01
      • 2010-10-20
      • 2019-01-02
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2013-11-26
      相关资源
      最近更新 更多