Private Sub SetFocus(ByVal controlToFocus As Control) Dim scriptFunction As New StringBuilder
Dim scriptClientId As String scriptClientId = controlToFocus.ClientID scriptFunction.Append("<script language='javascript'>")
scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
scriptFunction.Append("</script>") RegisterStartupScript("focus", scriptFunction.ToString()) End Sub
Dim scriptClientId As String scriptClientId = controlToFocus.ClientID scriptFunction.Append("<script language='javascript'>")
scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
scriptFunction.Append("</script>") RegisterStartupScript("focus", scriptFunction.ToString()) End Sub
通过设置焦点来定位页面
对于触发TextBox的TextChanged事件后焦点的定位问题,我的处理方法如下:
private void txt1_TextChanged(object sender,System.EventArgs e)
{
…….
string strJava=”<script language=’javascript’>document.frm1[‘txt2’].focus()</script>”;
Page.RegisterStartupScript(“focus”,strJava);
}
要注意的是,使用Page.RegisterStartupScript的时候,不可以启用页面的智能导航属性;由于在触发textchanged后,页面有刷新,所以上面的指令也不可以用Page.RegisterClientScript来代替;
通过研究服务器控件在客户端的表现形式,我们可以发现:
对于一般的服务器控件,它的ID在反映到客户端时,它的解析方式和普通的HTML控件是一样的,都只是控件的ID本身,我们可以直接通过它的ID 来获取该控件;
对于自定义的用户控件,反映到客户端时,被浏览器解析成如下的形式:
用户控件名称+‘1’+下划线+服务器控件名称 (1表示该服务器控件在页面序号)
如:UpdateAwb1_txtBookingNO
如果服务器控件里面还嵌套服务器控件,比如DataGrid,其形式如下:
用户控件名称+‘1’+下划线+服务器控件名称+ctl+标记号+嵌套控件名称;
如:UpdateAwb1_dgrdAWBItem__ctl2_txtPCS
如果是DataGrid,对于标记号,我们还需要通过程序来进行简单的处理,因为每增加或删除一行,相应的标记号就会产生+1或-1的变化,控件标记号=当前行的ItemIndex+2.
{
alert('对不起,请填写案件序号');
form1.txtEvertID.focus();
return false;
}
用户控件名称+‘1’+下划线+服务器控件名称+两个下划线+ctl+标记号+嵌套控件名称;
如:UpdateAwb1_dgrdAWBItem__ctl2_txtPCS