我正在使用ASP.NET AJAX控件工具包中的AutoComplete控件,並且遇到了在將焦點設置爲分配的文本框時未填充自動填充的問題。使用ASP.NET AJAX控件工具包設置焦點
我已經嘗試在Page_Load,Page_PreRender和Page_Init事件中設置焦點並且焦點設置正確,但AutoComplete不起作用。如果我沒有設置焦點,一切正常,但我想設置它,以便用戶沒有額外的點擊。
是否有一個特殊的地方需要設置焦點或其他我需要做的工作?謝謝。
我正在使用ASP.NET AJAX控件工具包中的AutoComplete控件,並且遇到了在將焦點設置爲分配的文本框時未填充自動填充的問題。使用ASP.NET AJAX控件工具包設置焦點
我已經嘗試在Page_Load,Page_PreRender和Page_Init事件中設置焦點並且焦點設置正確,但AutoComplete不起作用。如果我沒有設置焦點,一切正常,但我想設置它,以便用戶沒有額外的點擊。
是否有一個特殊的地方需要設置焦點或其他我需要做的工作?謝謝。
我們有完全相同的問題。我們所要做的就是在頁面底部編寫一個腳本,該腳本很快模糊,然後重新調整到文本框。您可以在這裏看看(非常哈希)解決方案:http://www.drive.com.au
該文本框ID是MainSearchBox_SearchTextBox
。看看線586 &你可以看到我接線的所有事件(我實際上使用原型爲這個位
基本上在文本框的焦點事件我設置了一個全局變量名爲textBoxHasFocus
爲true,並在模糊事件中,我將它設置爲false時,在頁面的加載事件我把這個腳本:。
if (textBoxHasFocus) {
$get("MainSearchBox_SearchTextBox").blur();
$get("MainSearchBox_SearchTextBox").focus();
}
這將重置文本框,這真的很狡猾,但它是我能找到的唯一解決方案
你是如何設定焦點的?我沒有嘗試過你建議的具體情況,但這裏是我將專注於我的控件:
Public Sub SetFocus(ByVal ctrl As Control)
Dim sb As New System.Text.StringBuilder
Dim p As Control
p = ctrl.Parent
While (Not (p.GetType() Is GetType(System.Web.UI.HtmlControls.HtmlForm)))
p = p.Parent
End While
With sb
.Append("<script language='JavaScript'>")
.Append("function SetFocus()")
.Append("{")
.Append("document.")
.Append(p.ClientID)
.Append("['")
.Append(ctrl.UniqueID)
.Append("'].focus();")
.Append("}")
.Append("window.onload = SetFocus;")
.Append("")
.Append("</script")
.Append(">")
End With
ctrl.Page.RegisterClientScriptBlock("SetFocus", sb.ToString())
End Sub
所以,我不知道你用什麼方法,但如果它是比我的不同,給這一個鏡頭,看看您是否仍然有問題,或者沒有。
我通常會做的是註冊一個客戶端腳本,以從我的codebehind方法運行下面的setFocusTimeout方法。當它運行時,它會等待一段時間,然後調用實際設置焦點的方法(setFocus)。這很糟糕,但似乎你必須走這樣的路線,以阻止AJAX竊取你的焦點。
function setFocusTimeout(controlID) {
focusControlID = controlID;
setTimeout("setFocus(focusControlID)", 100);
}
function setFocus() {
document.getElementById(focusControlID).focus();
}
我發現從格倫斯拉文和克里斯/亞歷克斯的答案,讓我更接近解決我的具體問題與上已經連接了一個AutoCompleteExtender一個ASP.NET TextBox控件設置焦點。 document.getElementById(focusControlID).focus()不斷拋出一個JavaScript錯誤,暗示document.getElementById返回一個空對象。 focusControlID變量正在爲TextBox控件返回正確的運行時ClientID值。但不管出於什麼原因,document.getElementById函數都不喜歡它。
我的解決方案是將jQuery引入混合中,因爲我已經使用它來繪製任何具有焦點的控件的背景,並且強制Enter鍵通過表單選項卡而不是發射回發。
我的setFocus功能結束這樣看:
function setFocus(focusControlID) {
$('#' + focusControlID).blur();
$('#' + focusControlID).focus();
}
這擺脫了JavaScript的運行時錯誤的,把重點放在所需的TextBox控件,並放置光標在控制範圍之內爲好。如果沒有先模糊然後對焦,控制器會突出顯示爲有焦點,但光標不會位於控制器中。用戶仍然需要在控件內部點擊才能開始編輯,這將是UX的煩惱。
我也不得不增加超時從100到300。您的里程我改變...
我同意大家的是,這是一個黑客。但從最終用戶的角度來看,他們沒有看到這個代碼。對他們來說,如果他們不得不手動點擊控件內部,而不是自動放置在控件中,並輸入前幾個字母來觸發自動查找功能。所以,所有誰提供了他們的黑客的帽子。
我希望這對別人有幫助。
這是浪費,它的簡單
這是你需要做的
controlId.focus()什麼;在VB
C# controlID.focus()代替該網頁加載或button_click部
例如。 panel1.focus();如果panel1有附加的模型彈出擴展器,那麼我們把這個代碼放在頁面加載部分
+1爲承認這是一個黑客:) – edosoft 2010-01-29 10:40:41