2008-09-03 23 views
5

ASP.NET AJAXコントロールツールキットのAutoCompleteコントロールを使用していますが、割り当てられたテキストボックスにフォーカスを合わせたときにオートコンプリートが設定されないという問題が発生しています。ASP.NET AJAXコントロールツールキットでフォーカスを設定する

Page_Loadイベント、Page_PreRenderイベント、Page_Initイベントでフォーカスを設定しようとしましたが、フォーカスは正しく設定されていますが、オートコンプリートは機能しません。フォーカスを設定しないと、すべて正常に機能しますが、ユーザーが余分なクリックをしないように設定したいと思います。

私はこの作業をするために必要な焦点や何かを設定する必要がある特別な場所はありますか?ありがとう。

答えて

3

全く同じ問題がありました。私たちがしなければならなかったのは、ページの一番下にスクリプトを書くことです。このスクリプトはすぐにぼやけて、テキストボックスに再フォーカスします。 http://www.drive.com.au

テキストボックスIDは、MainSearchBox_SearchTextBoxです。ここでは、(ひどくハッキーな)ソリューションを見てみることができます。私は実際にこのビットのプロトタイプを使用しています。

基本的にテキストボックスのフォーカスイベントには、textBoxHasFocusというグローバル変数を設定しました。それは本当に危険なのです。これは、テキストボックスをリセットし

if (textBoxHasFocus) { 
    $get("MainSearchBox_SearchTextBox").blur(); 
    $get("MainSearchBox_SearchTextBox").focus(); 
} 

、それは私が見つけることができる唯一のソリューションです:。。真とblurイベント上に、私は、ページのロードイベントで、私はこのスクリプトを呼び出すfalseに設定しました

+1

+1それはハックだと認めています:) – edosoft

0

どのようにフォーカスを設定していますか?特定のシナリオを試したことはありませんが、私は私のコントロールにフォーカスを設定します。

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 

だから、私はあなたが使用しているものの方法わからないんだけど、それは私のものよりも違う場合は、その打撃を与えると、あなたはまだ問題があるかどうかを確認してください。

0

通常は、私のコードビハインドメソッドから以下のsetFocusTimeoutメソッドを実行するためにclientsideスクリプトを登録します。これが実行されると、少し時間が経過してから実際にフォーカスを設定するメソッド(setFocus)を呼び出します。それはひどくハッキリですが、AJAXがあなたの焦点を盗んでしまうのを止めるために、このような道を進む必要があるようです。

function setFocusTimeout(controlID) { 
    focusControlID = controlID; 
    setTimeout("setFocus(focusControlID)", 100); 
} 

function setFocus() { 
    document.getElementById(focusControlID).focus(); 
} 
0

私はグレンスラベンからとクリス/アレックスから回答が近づく添付AutoCompleteExtenderを持っていたASP.NET TextBoxコントロールにフォーカスを設定すると私の特定の問題への解決策に私を得ることがわかりました。 document.getElementById(focusControlID).focus()は、document.getElementByIdがnullオブジェクトを返すことを意味するjavascriptエラーをスローし続けました。 focusControlID変数は、TextBoxコントロールの正しいランタイムClientID値を返していました。しかし、どんな理由であれ、document.getElementById関数はそれを気に入らなかった。

私は、既にフォーカスを持っているコントロールのバックグラウンドをペイントし、ポストバックを発生させる代わりにフォームを介してEnterキーを強制的に押して、jQueryをミックスに投げ込んでいました。

私は、setFocus機能は次のように見てしまった:

function setFocus(focusControlID) { 
    $('#' + focusControlID).blur(); 
    $('#' + focusControlID).focus(); 
} 

これは、JavaScriptのランタイムエラーの解消を希望TextBoxコントロールにフォーカスを置き、同様にコントロール内にカーソルを置いてしまいました。フォーカスを最初にぼかすことなく、コントロールがフォーカスを持っているかのように強調表示されますが、カーソルはまだコントロールに座っていません。ユーザーは編集を開始するためにコントロールの内部をクリックする必要がありますが、これはUXの煩わしさです。

また、私は、これはハックであることを皆に同意する...あなたの走行距離は異なる場合私の100から300にタイムアウトを増やすこと

を持っていました。しかし、エンドユーザーの観点からは、このコードは表示されません。コントロールの内部に自動的に配置され、最初の数文字を入力して自動検索機能を起動するのではなく、手動でコントロールの内部をクリックする必要があるかどうかが問題です。だから、ハックを提供したすべての人に帽子をかける。

私はこれが他の人にとって有益だと思っています。

1

これは、これはあなたが

controlId.focus()を行うために必要なものである廃棄物、そのシンプル

です。 C#の controlID.focus(中)VB

場所で、このページでは負荷やbutton_clickセクション

など。 panel1.focus(); panel1にモデルポップアップエクステンダーが添付されている場合は、このコードをページロードセクションに入れます

関連する問題