2011-07-07 18 views
3

次のコードを使用して、リストボックスのスクロール位置をポストバック間で維持しています。ポストバック時に更新パネルのMULTISELECT ListBoxスクロール位置を維持します。

<script type="text/javascript"> 
    // Helps maintain scroll position on the Specialty list box. 
    var xPos, yPos; 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    function BeginRequestHandler(sender, args) 
    { 
     var listBox = $get('<%= Special.ClientID %>'); 

     if (listBox != null) 
     { 
      xPos = listBox.scrollLeft; 
      yPos = listBox.scrollTop; 
     } 
    } 

    function EndRequestHandler(sender, args) 
    { 
     var listBox = $get('<%= Special.ClientID %>'); 

     if (listBox != null) 
     { 
      listBox.scrollLeft = xPos; 
      listBox.scrollTop = yPos; 
     } 
    } 

    prm.add_beginRequest(BeginRequestHandler); 
    prm.add_endRequest(EndRequestHandler); 
</script> 

これはFirefox 5またはChromeで完全に機能します。 IE8/IE9では、リストボックス内の項目を選択するたびに、ポストバックが発生し、リストボックスはスクロール位置を維持します。キャッチとは、ポストバックの後、ボックス内をスクロールするか、矢印をクリックすると、スクロール位置がリストボックスの先頭にスナップします。

FirefoxまたはChromeでは、スクロール開始時のスナップバックは発生しません。

ありがとうございました。

おそらく長年の懸案
+0

私はあなたに似たいくつかのコードスニペットを試しましたが、私の状況ではうまくいきませんでした。あなたとその唯一の違いは、prm.add_beginRequest(BeginRequestHandler)です。 prm.add_endRequest(EndRequestHandler); は最後ではありませんでした。リセットするオブジェクトはvarとして宣言されていませんでした。奇妙な!!これを投稿してくれてありがとう、私はデバッグから時間を節約できました。 – Tim

答えて

0

が、どれも-レスは2071回閲覧:

  • 秒ID複数の=「MySelectと」名前は

  • FSを選択しているため、フォントの大きさです選択

    function SetScrollTop(s, fs) 
    { 
        if(document.getElementById(s) != null) 
        { 
         document.getElementById(s).scrollTop = (document.getElementById(s).selectedIndex * fs) + 1; 
        } 
    } 
    
ボディのonload = "SetScrollTop( 'MySelectと'、14)" と

この関数を呼び出し。

IEはポストバックでゼロをスクロールするようになっているので、選択された項目(Cookieまたは自己作成のセッションハンドラ?)を何とかして追跡する必要があります。選択された項目に表示されます。次に、オンロード時にスクロールトップを設定します。

関連する問題