次のコードを使用して、リストボックスのスクロール位置をポストバック間で維持しています。ポストバック時に更新パネルの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では、スクロール開始時のスナップバックは発生しません。
ありがとうございました。
おそらく長年の懸案
私はあなたに似たいくつかのコードスニペットを試しましたが、私の状況ではうまくいきませんでした。あなたとその唯一の違いは、prm.add_beginRequest(BeginRequestHandler)です。 prm.add_endRequest(EndRequestHandler); は最後ではありませんでした。リセットするオブジェクトはvarとして宣言されていませんでした。奇妙な!!これを投稿してくれてありがとう、私はデバッグから時間を節約できました。 – Tim