我有一个带嵌套母版的子页面意味着2个母版页从另一个母版页继承,在该子页面中我只有所有用户控件。
所以在我的情况下,我必须在用户控件列表框的异步回发后维护子页面的滚动位置。
我试过了:
MaintainScrollPositionOnPostback="true"
with page指令和js代码
<script type="text/javascript" >
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
xPos = document.getElementById("<%=Panel1.ClientID %>").scrollLeft;
yPos = document.getElementById("<%=Panel1.ClientID %>").scrollTop;
}
function EndRequestHandler(sender, args) {
document.getElementById("<%=Panel1.ClientID %>").scrollLeft = xPos;
document.getElementById("<%=Panel1.ClientID %>").scrollTop = yPos;
}
</script>
对于面板和div以及更新面板......这些都完全失败,为什么因为如果子页面正在回发意味着相关的母版页也发布了支持..但我不知道如何保持滚动位置..
请尽快帮助我。
谢谢你们
答案 0 :(得分:1)
假设我有一个
<asp:hiddenfield id="hid" runat="server"/>
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
xPos = document.getElementById("<%=Panel1.ClientID %>").scrollLeft;
yPos = document.getElementById("<%=Panel1.ClientID %>").scrollTop;
var h = document.getElementById("<%=hid.ClientID %>");
h.value = xPos.toString() + "_" + yPos.toString();
}
function EndRequestHandler(sender, args) {
var val = document.getElementById("<%=hid.ClientID %>").value.split('_');
xPos = parseFloat(val[0]);
yPos = parseFloat(val[1]);
document.getElementById("<%=Panel1.ClientID %>").scrollLeft = xPos;
document.getElementById("<%=Panel1.ClientID %>").scrollTop = yPos;
}
</ asp:hiddenfield>
感谢
答案 1 :(得分:0)
如果您喜欢客户端代码和jQuery:
$(document).ready(function () {
$(window).on('beforeunload', function () {
document.cookie = "keepscroll=" + $(window).scrollTop();
});
var cs = document.cookie ? document.cookie.split(';') : [];
var i = 0, cslen = cs.length;
for (; i < cs.length; i++) {
var c = cs[i].split('=');
if (c[0].trim() == "keepscroll") {
$(window).scrollTop(parseInt(c[1]));
break;
}
}
});
如果您只喜欢客户端代码:
window.onbeforeunload = function () {
document.cookie = "keepscroll=" + document.body.scrollTop;
};
var keepscroll = window.setTimeout(function () {
var cs = document.cookie ? document.cookie.split(';') : [];
var i = 0, cslen = cs.length;
for (; i < cs.length; i++) {
var c = cs[i].split('=');
if (c[0].trim() == "keepscroll") {
window.scrollTo(0, parseInt(c[1]));
break;
}
}
window.clearTimeout(keepscroll);
keepscroll = null;
}, 100);