ASP.net / Javascript:自动回发触发和下一次控制以获得焦点

时间:2012-12-05 21:19:26

标签: javascript asp.net vb.net event-handling focus

我将在免责声明中提出我的问题,即我对ASP和VB编程相当新,但尚未接触到所有语言和框架所提供的内容。

我正在使用VB构建一个ASP站点,我有特定的要求要遵循。在相关表单的部分中,一系列文本框收集项目的数量。回发后,数量用于重新计算总数。所有这些控件都能完美地执行计算。

对于此表单,我正在使用OnChange Javascript事件在其中任何一个被修改时触发回发。这也正常。但是,当用户单击或标签远离正在更改的文本框并且回发触发时,没有控件似乎具有焦点。

如果他们点击另一个控件,我需要关注用户点击的控件。是否有一个事件或方法可以捕获在回发被触发之前立即获得焦点的控件的ID?我已经看到几个问题和答案,演示了如何收集实际触发回发的控件的ID,但这会将焦点直接放回到刚刚更改的字段中。

是否将焦点置于触发回发的控件中,该行为要求用户选择下一次控制两次,一次间接触发回发,一次将焦点置于所需的控件中。

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全了解您,但我尝试从您的描述中重新创建您的场景,并且使用UpdatePanel看起来就像一个简单的解决方案。这是一种快速简便的页面访问方式,无需担心细节问题。使用UpdatePanel包围正在更新的字段,并为导致回发的控件(或控件)添加AsyncPostBackTrigger(在本例中为隐藏按钮):

<script type="text/javascript">
    function pb() {
        document.getElementById("<%= btnPostBack.ClientID %>").click();
    }
</script>
<asp:button id="btnPostBack" runat="server" onclick="PostBack" style="display: none;" />

<asp:textbox id="t1" runat="server" onchange="pb();" />
<asp:textbox id="t2" runat="server" onchange="pb();" />
<asp:textbox id="t3" runat="server" onchange="pb();" />
<asp:textbox id="t4" runat="server" onchange="pb();" />

<asp:updatepanel id="update" runat="server">
    <contenttemplate>
        <asp:label id="label" runat="server" />
    </contenttemplate>
    <triggers>
        <asp:asyncpostbacktrigger controlid="btnPostBack" />
    </triggers>
</asp:updatepanel>

在代码隐藏的PostBack方法中,我只是汇总了t1,t2,t3和t4的值。我可以从一个TextBox到下一个添加文本,并更新标签而不会丢失焦点。