在ASP.Net中将TabIndex设置为下一个控件



我有一个用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;
        }
    }
}

最新更新