刷新后控制TAB键到下一个控件
生活随笔
收集整理的這篇文章主要介紹了
刷新后控制TAB键到下一个控件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
頁面上的控件能一直TAB下去,這是系統的一個很基本的要求。在網上沒有搜索到相關的方法。我覺得一般做法都是使頁面無刷新,但是如果遇到頁面不得不刷新的情況,如何去控制呢?
?? 思路是很簡單的,首先是獲取引起postback的控件,?? Control?ocontrol?=?this.FindControl(Request.Form["__EVENTTARGET"]);//"_EVENTTARGET"記錄了上次引發postback事件的控件ID。 ? 接著我自然會想到找到該控件的下一個控件,然后focus(),通過Page.Controls是可以找到,但是我認為這可能無法避免hardCode,因為在服務器段不好判斷一個Control是否可以focus().
??找了一些資料,我從 document.onkeydown?=?new?Function("if(event.keyCode==13){event.keyCode=9;}?"); ? 得到啟發,我想,我讓引發PostBack的控件獲得焦點,然后引發一個tab鍵的事件,焦點自然會移到下一個控件,于是我經過一番折騰,得到了一個結論,這是不行的,為什么不行,我也不知道。測試代碼如下:
?? <%@?Page?Language="C#"?AutoEventWireup="true"??CodeFile="Default.aspx.cs"?Inherits="_Default"?%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head?id="Head1"?runat="server">
????<title>Untitled?Page</title>
????<script>
????function?ControlFocus(){
??????var?Ka=document.createEventObject();?
???????Ka.ctrlKey=false;?
???????Ka.keyCode=9;?
???????document.fireEvent("onkeydown",Ka);
???????}
????document.onkeydown?=?new?Function("if(event.keyCode==9){alert('Tab');}?");
??//該事件僅是測試時使用
????</script>
</head>
<body>
????<form?id="form1"?runat="server">
????????<div>
????????????<input?type="text"?id="test"?style="color:?Red;?border:?0;"?onblur="ControlFocus();"?/>
????????????<asp:TextBox?ID="TextBox1"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox2"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox3"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox4"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox5"?runat="server"></asp:TextBox></div>
????</form>
</body>
</html>
? 按我的想法,當test失去焦點的時候引發事件調用ControlFocus()函數,然后引發一個Tab鍵,結果Tab鍵是引發了(測試時能彈出'Tab'),但是焦點卻沒有轉移到下一個控件。查了很多資料也得不到解釋,我想既然能通過enter鍵轉化為tab鍵控制焦點,那么我編程引發tab鍵應該有同樣的效果,結果卻不是,網上也不到有關的解釋,有高手知道希望解釋一下.
? 沒辦法,只能通過在服務器端找到下一個控件的辦法來實現,雖然沒多高的技術含量,還是發出來給大家看一下: ????????//這里是配置文件寫的可focus的控件,因為有使用第三方控件
????????string?FocusAbleControlList?=?System.Configuration.ConfigurationSettings.AppSettings["AbleFocusControlList"];
????????private?bool?isFocusAble(string?ControlType)
????????{
????????????if?(FocusAbleControlList.IndexOf(","?+?ControlType?+?",")?<?0)
????????????{
????????????????return?false;
????????????}
????????????else
????????????{
????????????????return?true;
????????????}
????????}
????????protected?override?void?OnLoad(EventArgs?e)
????????{
????????????base.OnLoad(e);
????????????if?(Request.Form["__EVENTTARGET"]?!=?null)
????????????{
????????????????Control?ocontrol?=?this.FindControl(Request.Form["__EVENTTARGET"]);
????????????????if?(ocontrol?!=?null)
????????????????{
????????????????????foreach(Control?con?in?this.Controls)
????????????????????{
??????????????//多個from的情況,這里就hardcode了
????????????????????????if?(con.ID?!=?null?&&?con.ID.ToLower().IndexOf("form")?>?-1)?????????????????????????{
????????????????????????????int?index?=?con.Controls.IndexOf(ocontrol);
????????????????????????????if(index?!=?-1)
????????????????????????????{
????????????????????????????????bool?isableFocous?=?false;
????????????????????????????????while?(!isableFocous)
????????????????????????????????{
????????????????????????????????????index++;
????????????????????????????????????string[]?temp?=?con.Controls[index].ToString().Split('.');
????????????????????????????????????string?typename?=?temp[temp.Length?-?1];
????????????????????????????????????isableFocous?=?isFocusAble(typename);
????????????????????????????????}
????????????????????????????????con.Controls[index].Focus();
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
?
?? 發此文的更多是希望能看到各位的思路,我認為要實現這個功能應該還有更簡單的方法。
???
??
??
?? 思路是很簡單的,首先是獲取引起postback的控件,?? Control?ocontrol?=?this.FindControl(Request.Form["__EVENTTARGET"]);//"_EVENTTARGET"記錄了上次引發postback事件的控件ID。 ? 接著我自然會想到找到該控件的下一個控件,然后focus(),通過Page.Controls是可以找到,但是我認為這可能無法避免hardCode,因為在服務器段不好判斷一個Control是否可以focus().
??找了一些資料,我從 document.onkeydown?=?new?Function("if(event.keyCode==13){event.keyCode=9;}?"); ? 得到啟發,我想,我讓引發PostBack的控件獲得焦點,然后引發一個tab鍵的事件,焦點自然會移到下一個控件,于是我經過一番折騰,得到了一個結論,這是不行的,為什么不行,我也不知道。測試代碼如下:
?? <%@?Page?Language="C#"?AutoEventWireup="true"??CodeFile="Default.aspx.cs"?Inherits="_Default"?%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head?id="Head1"?runat="server">
????<title>Untitled?Page</title>
????<script>
????function?ControlFocus(){
??????var?Ka=document.createEventObject();?
???????Ka.ctrlKey=false;?
???????Ka.keyCode=9;?
???????document.fireEvent("onkeydown",Ka);
???????}
????document.onkeydown?=?new?Function("if(event.keyCode==9){alert('Tab');}?");
??//該事件僅是測試時使用
????</script>
</head>
<body>
????<form?id="form1"?runat="server">
????????<div>
????????????<input?type="text"?id="test"?style="color:?Red;?border:?0;"?onblur="ControlFocus();"?/>
????????????<asp:TextBox?ID="TextBox1"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox2"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox3"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox4"?runat="server"></asp:TextBox>
????????????<asp:TextBox?ID="TextBox5"?runat="server"></asp:TextBox></div>
????</form>
</body>
</html>
? 按我的想法,當test失去焦點的時候引發事件調用ControlFocus()函數,然后引發一個Tab鍵,結果Tab鍵是引發了(測試時能彈出'Tab'),但是焦點卻沒有轉移到下一個控件。查了很多資料也得不到解釋,我想既然能通過enter鍵轉化為tab鍵控制焦點,那么我編程引發tab鍵應該有同樣的效果,結果卻不是,網上也不到有關的解釋,有高手知道希望解釋一下.
? 沒辦法,只能通過在服務器端找到下一個控件的辦法來實現,雖然沒多高的技術含量,還是發出來給大家看一下: ????????//這里是配置文件寫的可focus的控件,因為有使用第三方控件
????????string?FocusAbleControlList?=?System.Configuration.ConfigurationSettings.AppSettings["AbleFocusControlList"];
????????private?bool?isFocusAble(string?ControlType)
????????{
????????????if?(FocusAbleControlList.IndexOf(","?+?ControlType?+?",")?<?0)
????????????{
????????????????return?false;
????????????}
????????????else
????????????{
????????????????return?true;
????????????}
????????}
????????protected?override?void?OnLoad(EventArgs?e)
????????{
????????????base.OnLoad(e);
????????????if?(Request.Form["__EVENTTARGET"]?!=?null)
????????????{
????????????????Control?ocontrol?=?this.FindControl(Request.Form["__EVENTTARGET"]);
????????????????if?(ocontrol?!=?null)
????????????????{
????????????????????foreach(Control?con?in?this.Controls)
????????????????????{
??????????????//多個from的情況,這里就hardcode了
????????????????????????if?(con.ID?!=?null?&&?con.ID.ToLower().IndexOf("form")?>?-1)?????????????????????????{
????????????????????????????int?index?=?con.Controls.IndexOf(ocontrol);
????????????????????????????if(index?!=?-1)
????????????????????????????{
????????????????????????????????bool?isableFocous?=?false;
????????????????????????????????while?(!isableFocous)
????????????????????????????????{
????????????????????????????????????index++;
????????????????????????????????????string[]?temp?=?con.Controls[index].ToString().Split('.');
????????????????????????????????????string?typename?=?temp[temp.Length?-?1];
????????????????????????????????????isableFocous?=?isFocusAble(typename);
????????????????????????????????}
????????????????????????????????con.Controls[index].Focus();
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
?
?? 發此文的更多是希望能看到各位的思路,我認為要實現這個功能應該還有更簡單的方法。
???
??
??
轉載于:https://www.cnblogs.com/yfx1982/archive/2007/12/11/991077.html
總結
以上是生活随笔為你收集整理的刷新后控制TAB键到下一个控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用SDK连接SBO?
- 下一篇: 精妙的SQL语句