Ajax Timer會讓TextBox失去Focused,如何解決?
Ajax Timer會讓UpdatePanel中的TextBox失去Focused這個是正常的現象, 因為每隔一段時間, UpdatePanel就會依Timer去更新一次,就會讓TextBox失去Focused.解決這個問題的方法如下:1.給所有UpdatePanel中的TextBox添加attribute:onfocus="txtFocus()" 例如 2.在頁面的標籤下方添加如下javascript函數:<script language="javascript" type="text/javascript">function txtFocus(){var exp=new Date();exp.setTime(exp.getTime() + 60*60*1000);document.cookie = "focusTextBox="+ event.srcElement.id + ";expires=" + exp.toGMTString();}</script>這裏由於用到了cookies來記錄post之前游標停留在哪個TextBox之中,所以IE流覽器必須支持cookies 3.給UpdatePanel添加OnInit事件:protected void UpdatePanel1_Init(object sender, EventArgs e){if (this.Request.Cookies["focusTextBox"] != null){string s = this.Request.Cookies["focusTextBox"].Value;//讀出post之前游標停留在哪個TextBox之中 string script = "var inp = $get('" + s + "');" + "window.setTimeout('var r = inp. createTextRange(); r.collapse(false); r.select();', 10);"; ScriptManager.RegisterStartupScript(this.UpdatePanel1,this.Page.GetType(), "ScriptBlock", script, true);}} 4.以上只是普遍的解決方案,如有特殊要求可適當修改代碼。主要的思路是在timer觸發tick之前,找到合適的時機用javascript將post之前最後停留的TextBox記錄到cookies中,然後在post之後UpdatePanel的OnInit事件中再將滑鼠的游標重新放置於此TextBox中. /></span> </td> <td > </td> </tr> </table> <br /> </td> </tr> </table> <br /> <span id="ContentPlaceHolder1_WSResponse1"></span> <div> <script language="JavaScript" type="text/JavaScript"> function receiveServerDataWSGridView1(arg) {} </script> </div> <br /> <br /> <br /> <br />  <input type="submit" name="ctl00$ContentPlaceHolder1$btnBack" value="回FAQ" onclick="location.href='FAQ.aspx?DataType=MTY=&MenuID=MTA=';return false;" id="ContentPlaceHolder1_btnBack" /></div> </td> </tr> <tr> </tr> <tr> </tr> <tr> </tr> </table> </td> </tr> </table> </td> </tr> <tr> </tr> <tr> </tr> </table> <br /> <table width="100%"> <tr> <td align="center" class="footer"> Copyright © 2000 InfoLight System Corp. Ltd. 訊光科技系統股份有限公司版權所有 <br /> 台北市大同區 103 民生西路 290 號 8 樓 電話:02-2556-6159 傳真:02-2556-9425<br /> 上海訊光:上海市長寧區延安西路 1030弄 12 號 303室 電話:021-6225-1720 <a href="http://www.infolight.com.cn"> http://www.infolight.com.cn</a><br /> </td> </tr> </table> <script type="text/javascript"> //<![CDATA[ WebForm_InitCallback(); theForm.oldSubmit = theForm.submit; theForm.submit = WebForm_SaveScrollPositionSubmit; theForm.oldOnSubmit = theForm.onsubmit; theForm.onsubmit = WebForm_SaveScrollPositionOnSubmit; //]]> </script> </form> </body> </html>