我创建的网站有大约 20~ 左右的 asp:TextBox,它们都使用回发。 我遇到的问题是每次回发时文本框都会失去焦点。 我已经设法将注意力集中在称为回发的元素上,但这不是我想要的,因为到那时新框已成为焦点。 我发现很少有 javascript 应该在回发后保持焦点,但其中一个无法正常工作。 老实说,我不太了解 javascript,也不知道如何使用 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 面板中工作。请注意,它现在按名称搜索。
关于javascript - 如何在回发后保持对 asp 文本框或任何 html 元素的关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26475585/