我这里有个情况。
我的页面中有大约 5 个 ASP 控件,包括一些文本框和单选按钮。这些控件是表单的一部分,用户将在其中将数据一个一个地填充到这些控件中。现在,问题是这些控件中的每一个都有 AutoPostBack = True
和 OnTextChanged
或 OnCheckedChanged
与之相关的事件。
问题来了。每当用户填充这些控件之一并尝试导航到下一个控件时,该控件需要双击才能获得焦点。填表的时候每一个控件都要双击,非常不方便。
我试图通过设置 Page.SetFocus(<control>);
来克服这种情况。在每个OnTextChanged
事件传递给表单中的下一个控件。但在单选按钮的情况下同样不起作用。当焦点顺序改变时,它也不起作用。
我需要一个解决方法来解决这个问题。我无法删除 OnTextChanged
或 OnCheckedChanged
由于要求而发生的事件。
最佳答案
实际发生的是页面被回发,然后焦点转移回导致回发的控件。双击实际上并不是严格发生的。第一次单击导致第一个控件失去焦点,从而导致回发。第二次单击然后在回发发生后聚焦您想要的控件。
您可以做的是捕获在回发之前获得焦点的控件,并在页面重新加载时将焦点设置回该控件。
这是一个示例(已更新):
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="True"
onFocus="SetNextControl(this);"></asp:TextBox>
<asp:RadioButton ID="RadioButton1" runat="server" OnCheckedChanged="RadioButton1_CheckedChanged"
AutoPostBack="True" GroupName="RBGroup" onClick="SetNextControl(this);" />
<asp:RadioButton ID="RadioButton2" AutoPostBack="True" GroupName="RBGroup" runat="server" onClick="SetNextControl(this);"/>
<asp:TextBox ID="TextBox2" runat="server" OnTextChanged="TextBox2_TextChanged" AutoPostBack="True"
onFocus="SetNextControl(this);"></asp:TextBox>
</div>
<asp:HiddenField ID="HiddenField1" runat="server" />
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
if (document.getElementById("<%=HiddenField1.ClientID %>").value != "") {
var controlToFocus = document.getElementById(document.getElementById("<%=HiddenField1.ClientID %>").value);
controlToFocus.focus();
document.getElementById("<%=HiddenField1.ClientID %>").value = "";
}
})
function SetNextControl(e) {
document.getElementById("<%=HiddenField1.ClientID %>").value = e.id;
}
</script>
</asp:Content>
上面的示例并不完美,我不确定它是否会按照您希望的方式使用 RadioButtons,因为它们没有 onFocus 事件。我已将它们更改为使用 onClick,以便至少将焦点保留在最后选择的单选按钮上。希望这至少能让你更接近你想要的东西。
关于c# - 由于 OnTextChanged 事件,ASP 控件需要双击才能获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141621/