如何在回发后保持对asp文本框或任何html元素的关注)

How to retain focus on asp textbox or any html element) after postback

本文关键字:html 任何 元素 文本 asp      更新时间:2023-09-26

我正在创建一个大约有20个asp:TextBox的网站,它们都使用回发。我遇到的问题是,每次回发时,文本框都会失去焦点。我设法保持了对称为回发的元素的关注,但这并不是我想要的,因为到那个时候,新框就被聚焦了。我发现很少有java脚本应该在发布后保持焦点,但它们中的任何一个都无法工作。老实说,我不太了解javascript,也不知道如何使用正确的过程,但似乎没有办法只使用html和c#来实现我想要的。

 <div class="row">
        <div class="col-sm-6">
            <div class="form-group">
                <div class="form-group" id="vacancyTitleGroup" runat="server">
                    <label for="inputTitle" class="col-sm-5 control-label">Vacancy title  <b>*</b></label>
                    <div class="col-sm-7">
                        <asp:TextBox runat="server" type="text" class="form-control" ID="inputTitle" placeholder="Vacancy title" OnTextChanged="inputTitle_TextChanged"  AutoPostBack="True" MaxLength="50"></asp:TextBox>
                    </div>
                </div>
                <div class="form-group" id="positionGroup" runat="server">
                    <label for="inputPosition" class="col-sm-5 control-label">Employee Position</label>
                    <div class="col-sm-7">
                        <asp:TextBox runat="server" type="text" class="form-control" ID="inputPosition" placeholder="Employee Position" OnTextChanged="inputPosition_TextChanged" AutoPostBack="True"></asp:TextBox>
                    </div>
                </div>
                <div class="form-group" id="disciplineGroup" runat="server">
                    <label for="inputDiscipline" class="col-sm-5 control-label">Job Field/Discipline</label>
                    <div class="col-sm-7">
                        <asp:TextBox runat="server" type="text" class="form-control" ID="inputDiscipline" placeholder="Job Field/Discipline" OnTextChanged="inputDiscipline_TextChanged" AutoPostBack="True"></asp:TextBox>
                    </div>
                </div>
                <div class="form-group" id="contractGroup" runat="server">
                    <label for="inputContract" class="col-sm-5 control-label">Contract Type <b>*</b></label>
                    <div class="col-sm-7">
                        <asp:TextBox runat="server" type="text" class="form-control" ID="inputContract" placeholder="Contract Type" AutoPostBack="True" OnTextChanged="inputContract_TextChanged"></asp:TextBox>
                    </div>
                </div>

以下是我想保持关注的一些html对象,我已经为此坚持了半天,如果有人能给我一个粗略的指导,告诉我如何在回邮后保持关注,我将永远感激。

我认为没有一种简单的方法可以直接保持焦点,但你可以添加一个隐藏字段并将活动元素发布到其中:

假设隐藏字段的id为"hdnSelectedField"。一个应该工作。

使用JQuery:

<asp:HiddenField ID="hdnSelectedField" runat="server"  ClientIDMode="Static"  />
<script>
    // this creates an event that fires any time any "input" type element gets focus
    $("input").focus(function (e) {
        // get the target's type attribute (i.e. text, button, checkbox) and make sure it isn't submit
        if ($(e.target).attr('type') != 'submit') {
            // get the currently focused element's id & store it in the hidden field for postback processing
            var activeElem = document.activeElement.name;
            $("#hdnSelectedField").val(activeElem);
            // this just makes it obvious that something is happening. Set a <span> to the field's id
            $("#selectedElementName").html(activeElem);
        }
    });
</script>

页面加载:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            var fieldSelectedName = hdnSelectedField.Value;
            if(!String.IsNullOrEmpty(fieldSelectedName))
                Page.FindControl(fieldSelectedName).Focus();
        }
    }
  • 编辑为使用clientIDMode=static并在asp.net面板中工作。请注意,它现在按名称进行搜索
相关文章: