将焦点设置到转发器中的文本框

Posted

技术标签:

【中文标题】将焦点设置到转发器中的文本框【英文标题】:Set focus to texbox in repeater 【发布时间】:2013-08-22 16:30:37 【问题描述】:

我有一个带有标题和项目模板的转发器。标题包含一个文本框和链接按钮(“添加”将在文本框中输入的项目添加到列表中)。我需要的是能够在单击“添加”后将焦点重新设置在文本框上。我包括代码和我尝试过的(无济于事)。我包括用于中继的 OnItemDataBound,一个用于设置焦点的 javascript(想要在客户端执行此操作):

<asp:Repeater 
    runat="server" 
    ID="rptExclPBSA" 
    OnItemDataBound="rptExclPBSA_ItemDataBound" 
    OnItemCommand="rptExclPBSA_ItemCommand">
    <HeaderTemplate>
        <table style="width:300px" border="0">
            <tr>
                <td style="vertical-align:top;width:100px">
                    <asp:TextBox runat="server" ID="tbExclBox" CssClass="NormalSmall" Width="90" MaxLength="5" />
                </td>
                <td style="width:200px;">
                    <asp:LinkButton ID="lbAddExcl" runat="server" CommandName="Add" Text="Add Something" />
                </td>
            </tr>
        </table>
    </HeaderTemplate>
    <ItemTemplate>
        <table style="width:300px" border="0">
            <tr>
                <td style="vertical-align:top;width:100px;text-align:center" class="NormalSmall">
                    <%# Eval("Box") %>
                </td>
                <td style="vertical-align:top;width:200px;">
                    <asp:ImageButton ID="ibRemoveExcl" runat="server" ImageUrl="images/delete.gif" CommandName="Remove" AlternateText="Delete That Thing"  />
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>

在后面的代码中:

protected void rptExclPBSA_ItemDataBound(object sender, RepeaterItemEventArgs e)

    if (e.Item.ItemType == ListItemType.Header)
    
        LinkButton lbAddExcl = e.Item.FindControl("lbAddExcl") as LinkButton;
        TextBox tbExclBox = e.Item.FindControl("tbExclBox") as TextBox;

        if (null != lbAddExcl && null != tbExclBox)
            lbAddExcl.Attributes.Add("onclick", "setFocusPOB('" + tbExclBox.ClientID + "');");
    


protected void rptExclPBSA_ItemCommand(object source, RepeaterCommandEventArgs e)

    TextBox tbExclBox = (TextBox)rptExclPBSA.Controls[0].Controls[0].FindControl("tbExclBox");
    do_whatever()
    tbExclBox.Focus();

Javascript:

function setFocusPOB(ctrl_id)
    var tbExclBox = document.getElementById(ctrl_id);
    if (null != tbExclBox)
        tbExclBox.focus();

【问题讨论】:

当do_whatever()时,你重新绑定中继器? 是的,我有一个数据表,我在其中添加文本框 (tbExclBox) 中的文本和其他一些内容,并使用数据表绑定转发器。 【参考方案1】:

当你在 do_whatever() 上重新绑定中继器时,文本框被重新创建,然后你必须再次找到它。

protected void rptExclPBSA_ItemCommand(object source, RepeaterCommandEventArgs e)

  TextBox tbExclBox = (TextBox)rptExclPBSA.Controls[0].Controls[0].FindControl("tbExclBox");
  do_whatever()

  tbExclBox = (TextBox)rptExclPBSA.Controls[0].Controls[0].FindControl("tbExclBox");
  tbExclBox.Focus();

不需要ItemDataBound事件。

【讨论】:

谢谢博迪。就是这样。

以上是关于将焦点设置到转发器中的文本框的主要内容,如果未能解决你的问题,请参考以下文章

将焦点设置在 xaml wpf 中的文本框上

如何使用 JavaScript 将焦点设置在 HTML 表单中的元素上?

调用函数时将焦点设置到文本框

将焦点设置在WPF中的文本框中

AngularJS - 在第一个文本框之后将焦点设置到下一个文本框

如何在使用fancybox打开的新页面中将焦点设置在文本框上