我有一个用C#编写的ASP.Net 4.5.1页面,上面有很多TextBoxes。当任何TextBoxes中的文本发生变化时,我想调用一个方法,1)启用"保存"按钮,b)将焦点移动到触发PostBack的TextBox之后的TextBox和下一个TabIndex。到目前为止,这是我的代码:
protected void EnableSaveButton(object sender, EventArgs e)
{
if ((REQUEST_PHASE)this.CurrentPhaseID == REQUEST_PHASE.RECORDS)
{
btnSaveACProperty.Disabled = false;
Control control = (Control)sender;
int tabindex = 0;
if (control != null)
{
}
}
}
我想做的是获取控件的TabIndex,然后找到TabIndex+1的控件,并对其执行SetFocus()。我的问题是,我的代码中的控件变量没有TabIndex属性。我该怎么做?
每次更改文本框时都让页面返回服务器似乎是个坏主意。用Javascript做这种事情要好得多。
这个问题的答案有各种关于将焦点设置为下一个控件的建议,包括jQuery插件、启动键盘事件以及导航DOM以找到下一个控制。
$(function(){
$("form").on("change", ":input", function(){
$(":submit[name$=btnSaveACProperty]").prop("disabled", false);
$.tabNext();
});
});
根据服务器上的条件启用或禁用此功能应该相当简单。例如,如果您将Javascript放在一个外部文件中,那么您可以有条件地包含它:
protected void Page_PreRender(object sender, EventArgs e)
{
switch ((REQUEST_PHASE)this.CurrentPhaseID)
{
case REQUEST_PHASE.RECORDS:
{
Page.ClientScript.RegisterClientScriptInclude(
typeof(REQUEST_PHASE), "MoveFocusOnChange",
"~/scripts/moveFocusOnChange.js");
break;
}
}
}