2012-01-25 14 views
4

ページの一部にポストバックを引き起こす更新パネルがあり、ポストバック後にフォーカスを持つコントロール(更新パネルにない)がフォーカスを失います。フォーカスがあったコントロールを特定してその値を保存するにはどうすればよいのですか。ページがリロードされたときに再フォーカスすることができます。ありがとうございました。C#のフォーカスコントロールの検出

答えて

1

まず、すべての入力にフォーカスをバインドし、最後にフォーカスを当てたコントロールIDを保持します。 UpdatePanelの負荷を完了した後に続いて、私は思うが、私はそれを作るためのjQueryを使用しますが、私はここに私の考えを提示し、あなたはもう少しコードでそれを作ることができるということである最後の1

// keep here the last focused id 
var LastFocusedID = null; 

function watchTheFocus() 
{ 
    // on every input that get the focus, I grab the id and save it to global var 
    $(":input").focus(function() { 
    LastFocusedID = this.id; 
    }); 
} 

var prm = Sys.WebForms.PageRequestManager.getInstance();  
prm.add_initializeRequest(InitializeRequest); 
prm.add_endRequest(EndRequest); 

function InitializeRequest(sender, args) {  
} 

// after the updatePanel ends I re-bind the focus, and set the focus 
// to the last one control 
function EndRequest(sender, args) { 
    if(LastFocusedID != null) 
     $('#' + LastFocusedID).focus();   
    watchTheFocus(); 
} 

jQuery(document).ready(function() 
{  
    watchTheFocus(); 
}); 

にフォーカスを設定しましたjQueryを使って

+0

のように解決することができます。ありがとうございました。 –

+0

@DovMillerチェックする必要がある唯一のjQueryは$( ":input")です。focus()は、入力のフォーカストリガーに関数を追加するものです。残りはすべてシンプルなjavascriptです。 – Aristos

0

activeElementhasFocusプロパティのHTMLDocumentオブジェクトを使用して、どの要素にフォーカスがあるのか​​をjavascriptで取得できます。

HTML5のため、すべてでサポートされていない可能性があります。

+0

aspxページやC#コードの背後にはどこでどのようにすればよいですか?通常のHTMLはどうですか? –

+0

隠し入力フィールド "focusedControl"を持つことができます。クライアントがフォームをPOSTする前に、activeElement IDを入力に入れます。ページをクライアントに送り返すときは、DOMでIDを検索してコントロールをフォーカスするjavascriptイベント ''を設定します。 –

+0

詳細な例を教えてください。それは非常に有用であり、非常に高く評価されます。ありがとうございました。 –

0

あなたは、私がまだのjQueryを使用していないよ、あなたはjQueryのせずに詳細な例を与えることができれば、それは非常に役に立つことと非常に高く評価できるよう、私はJavaスクリプトで弱いよこの

var last_focused = null; 

$(function() { 

//store last focused element. 

$("input").live("focus", function(){ 
    last_focused = $(this); 
}); 


}); 

//in Script manager 

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_pageLoaded(pageLoaded); 

function pageLoaded(sender, args) 
{ 
    if(last_focused != null) 
    { 
    last_focused.focus(); 
    } 
} 
+0

それはJavaScriptでですか?スクリプトマネージャコードはどこに置かれますか。私はjavascriptで弱いです。 –

+0

はいこれはjavascriptです。これはasp.net.Windowsのjqueryのマイクロソフト製品です。ここでは、asp.net.Whenで表示されるように、いくつかのイベントがpag​​e_loadのようにトリガされます。更新パネルが更新されると、この関数は自動的に呼び出されます。 //msdn.microsoft.com/en-us/magazine/cc163354.aspx – sathishkumar

+0

スクリプトやコードのどこでこれを書かなければならないのかの詳細な説明と詳細が参考になるかもしれません。ありがとうございました。 –