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

Javascript 回发后如何保持对asp文本框或任何html元素的关注,javascript,c#,jquery,html,asp.net,Javascript,C#,Jquery,Html,Asp.net,我正在创建一个大约有20个asp:TextBox的网站,所有的网站都使用回发。 我遇到的问题是,每次回发时,文本框都会失去焦点。 我设法保持了对称为postback的元素的关注,但这不是我想要的,因为到那个时,新框已经被关注了。 我发现很少有Javascript应该在回发后保持焦点,但一个都不能工作。 老实说,我不太了解javascript,也不知道如何使用正确的过程,但似乎仅仅用html和c无法实现我想要的 空缺职位* 员工职位 工作领域/纪律 合同类型* 下面是一些我想保持关注的html

我正在创建一个大约有20个asp:TextBox的网站,所有的网站都使用回发。 我遇到的问题是,每次回发时,文本框都会失去焦点。 我设法保持了对称为postback的元素的关注,但这不是我想要的,因为到那个时,新框已经被关注了。 我发现很少有Javascript应该在回发后保持焦点,但一个都不能工作。 老实说,我不太了解javascript,也不知道如何使用正确的过程,但似乎仅仅用html和c无法实现我想要的


空缺职位*
员工职位
工作领域/纪律
合同类型*

下面是一些我想保持关注的html对象,我在这方面已经坚持了半天,如果有人能给我一个大概的指导,告诉我如何在回邮后保持关注,我将永远感激

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

假设隐藏字段的id为“hdSelectedField”。一种新的方法应该有效

使用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>
  • 编辑以使用clientIDMode=static并在asp.net面板中工作。请注意,它现在按名称进行搜索

您是否熟悉
if(IsPostBack)
如果在条件语句的Postback部分,您是否可以在页面上加载
SomeControl.Focus()
?这段代码对您的问题没有任何帮助,也无法显示您的.cs代码隐藏。如果您确定要在触发/触发特定事件时设置焦点,我也会使用
\uu DoPostBack()
方法来完成这项工作。我很好奇,为什么每次更改文本时都要回发到服务器。这对最终用户来说真的很烦人。@如果要获得数据验证,我可能只需要几次回发就可以成功,但我仍然会失去对这些字段的关注,为什么这对最终用户来说很烦人?@DJKRAZE我熟悉iPostback。我已经尝试了您的建议,但我需要知道当前焦点对象,并且根据我的理解,无法在服务器端存储当前焦点,也无法在回发时恢复它。我可以将焦点存储在textChanged事件上,但这些事件发生在对象失去焦点时,存储的是失去焦点的对象,而不是获得焦点的新对象。最终结果:每次你点击新的文本框时,会发生自动回发,焦点会跳到上一个文本框,因为它是存储焦点的文本框。Java脚本可以使用onfocus html事件,所以我们可能没有隐藏字段,问题是我从来没有写过任何javascript,也不知道如何使用它。你可以不使用隐藏字段,但是您仍然需要通过回发保持状态,因此需要某种形式的数据保持器。。。要么将其添加到查询字符串中,要么使用cookie,要么使用隐藏字段)嗯,我一直得到nullreferenceexception,如果我有许多div和许多表单,我应该放在哪里?正如您在我的示例代码中所看到的,这是我页面的开始,您可以将隐藏字段放在主asp.net表单中的任何位置。位置不重要,但我总是倾向于把它们放在最下面。你能在主页上发布你的内容吗?我可能可以看到是什么导致了这个问题。主页就像任何没有任何额外内容的页面一样,母版页包含了大部分信息。我已经完成了我的项目,如果你有VisualStudio,只看它可能比发布一堆代码更容易。如果您没有VS,请告诉我,为您的帮助干杯。
<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();
        }
    }