现在我改变一个文本框的内容,poskback后,我要让这个文本框的下一个控件(文本框、下拉列表等)
获取焦点,(比如是文本框,则让光标放到这个文本框里去),怎么做?
我现在通过获取Request["__EVENTTARGET"]获取这个引发事件的文本框id,然后在body 的load事件里通过id找到这个文本框,能让它获取光标,但我怎么样让它下一个控件获取光标,即就象没有发生postback,下移到下面的控件上一样?谢谢指教!!

解决方案 »

  1.   

    (假设 obj 是你的一个控件的ID(如"DropDownList2") )button click里写:
    string Script = "<script language=javascript>document.all('"+obj+"').focus();</script>";
    this.RegisterStartupScript(obj, Script);    可以聚焦到DropDownList2 .
      

  2.   

    /// <summary>
    /// 设置焦点
    /// </summary>
    /// <param name="page">当前页</param>
    /// <param name="strCtrlID">设置焦点控件ID</param>
    public static void SetFocus(System.Web.UI.Page page,string strCtrlID)
    {
    page.RegisterStartupScript("focus","<script language=\"javascript\">document.getElementById('" + strCtrlID + "').focus();</script>");
    }
      

  3.   

    呵呵,大家说的这些,我已经做到了
    我是要下一个控件获取焦点,但我不知道下一个控件的id是多少,
    就是说我要在把表单提交一次后,获取引发提交的控件的下一个控件的焦点,
    比如按tab键,如果没有提交表单,则光标会转到下一个控件,但因为这里提交了表单,所以就不行了
    ,我做到了能让发生提交表单的控件在提交表单之后能获取光标,即在body的load事件中加入“document.getElementById('" + strCtrlID + "').focus。但我现在要它的下一个控件获取光标,就象没有提交表单一样,我用window.event.keyCode=9来实现,但因为在load里还没有实际的srcelement对象,所以根本不起作用,不知道对js熟悉的人还有没有其他办法?如能赐教,感激不尽!!
      

  4.   

    要是你的文本框、下拉列表等各自独立的放在表格(Table)里的单元格(TD)里
    要想获取引发提交的控件的下一个控件也是很容易的
    假设引发控件的ID为obj
    则当此控件不是tr中的最后一个td时
    获得当前控件下一个控件JS如下:
    var nextobj=obj.parentNode.nextSibling
    当此控件是tr中的最后一个td时,如果此时还存在下一行tr
    获得当前控件下一个控件JS如下:
    var nextrow=obj.parentNode.parentNode.nextSibling;
    var nextobj=nextrow.firstChild.firstChild;
      

  5.   

    function SetFocusForPostBack(id)
    {
    var obj = document.getElementById(id);
    if(obj != null) 
    {
    //先查本td里的下一个控件
    var obj1 = GetNextInput(obj.nextSibling);
    if(obj1 != null)
    {
    obj1.focus();
    return;
    }
    //如果不存在,则查在临近td(单元格级别)里的下一个控件
     obj1 = GetTdInput(obj.parentNode.nextSibling);
    if(obj1 != null)
    {
    obj1.focus();
    return;
    }
    //如果还不存在,则查行级别里的下一个控件
    obj1 = GetTrInput(obj.parentNode.parentNode.nextSibling);
    if(obj1 != null)
    {
    obj1.focus();
    return;
    }
    //如果不存在,则查table级别里的控件(其他table)
    obj1 = GetTabInput(obj.parentNode.parentNode.parentNode.nextSibling);
    if(obj1 != null)
    {
    obj1.focus();
    }
    }
    }

    //获取table级别里的控件
    function GetTabInput(tab)
    {
    if(tab == null ) return null;
    var tr = tab.firstChild;
    if(tr == null)
    {
    return null;
    }
    else
    {
    //是否存在该tab的行里
    var obj = GetTrInput(tr);
    //如果在这个tab里没有找到,则查下一个tab
    if(obj == null)
    {
    tab = tab.nextSibling;
    }
    if( obj== null && tab != null)
    {
    return GetTabInput(tab);
    }
    else
    {
    return obj;
    }
    }
    }

    //行级别里的查找,原理跟tab里查找一样
    function GetTrInput(tr)
    {
    if(tr == null ) return null;
    var td = tr.firstChild;
    if(td == null)
    {
    return null;
    }
    else
    {
     var obj = GetTdInput(td);
    if(obj == null)
    tr = tr.nextSibling;
    if(obj == null && tr != null)
    {
    return GetTrInput(tr);
    }
    else
    {
    return obj;
    }
    }
    } //td级别里的查找
    function GetTdInput(td)
    {
    if(td == null ) return null;
    var obj = td.firstChild;
    //如果当前td里没有控件,则查找下一个td
    if(obj == null)
    {
    obj = td.nextSibling;
    if(obj != null)
    {
    return GetTdInput(obj);
    }
    else
    {
    return obj;
    }
    }
    //如果找到了,则返回这个控件
    if(obj.tagName.toLowerCase() == "input" && obj.type.toLowerCase() != "hidden")
    {
    return obj;
    }
    //如果是个表格,则查找这个表格
    else if(obj.tagName.toLowerCase() == "table")
    {
    return GetTabInput(obj);
    }
    //否则查找下一个控件
    else
    {
    return GetNextInput(obj);
    }
    } //控件级别里的查找
    function GetNextInput(obj)
    {
    if(obj == null )
    {
    return obj;
     }
     //如果找到则返回
    else if(obj.tagName.toLowerCase() == "input" && obj.type.toLowerCase() != "hidden")
    {
    return obj;
    }
    //如果当前控件有子项,则查找子项
    else if(obj.firstChild != null)
    {
    return GetNextInput(obj.firstChild);
    }
    //如果它有下一个控件,则查找下一个控件
    else if(obj.nextSibling != null)
    {
    return GetNextInput(obj.nextSibling);
    }
    else
    {
    //否则获取它的父控件的下一个控件
    obj = obj.parentNode.nextSibling;
    if(obj != null)
    {
    return GetNextInput(obj);
    }
    else
    {
    return null;;
    }
    }
    }这个问题,本人已经解决了,呵呵,但有一定局限性,不是所有的都能适用
      

  6.   

    根据控件在PAGE容器中对象的索引值,通过索引值加一并判断控件的有效性