|
Ajax Timer會讓TextBox失去Focused,如何解決? |
|
|
Ajax Timer會讓UpdatePanel中的TextBox失去Focused這個是正常的現象, 因為每隔一段時間, UpdatePanel就會依Timer去更新一次,就會讓TextBox失去Focused.解決這個問題的方法如下:1.給所有UpdatePanel中的TextBox添加attribute:onfocus="txtFocus()" 例如 2.在頁面的標籤下方添加如下javascript函數:這裏由於用到了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中. />
|
|
|