从弹出窗口返回后,重新加载并记住滚动位置

Reload and remember the scroll position after coming back from popup

本文关键字:加载 位置 滚动 新加载 窗口 返回      更新时间:2023-09-26

我有一个产品页面,每个产品都有一个链接:"购买"。单击链接后,将显示一个弹出窗口,其中嵌入了另一个.aspx文件。(弹出窗口由Colorbox插件生成)

用户进行购买后(单击发送到DB信息的按钮等):1.弹出窗口必须自行关闭2.必须重新加载父页3.滚动位置必须保持

问题是没有保持滚动位置(尤其是在IE浏览器中)。

我尝试过的:1.

 MaintainScrollPositionOnPostback="true" -- had no effect

和:

弹出页面:

<script>window.parent.callbackfromchild('" + ID + "');</script>

父页:函数callbackfromchild(arg){

            __doPostBack("callbackbtn", "");
            window.onload = function () {
                document.getElementById('#div' + arg).scrollIntoView(true);
            };

我做错了什么?

您需要在父aspx页面中使用此脚本

<script>
        function callbackfromchild(id) {
         //maintain hash on post back
          var form = document.getElementById("<%=Page.Form.ClientID%>");
          // Change form action & post back
            form.action += '#'+ id;
          __doPostBack("<%=callbackbtn.ClientID%>", "");
        }
    </script>

你需要这个锚——ID是从弹出窗口中使用的一个函数参数——放在每个ID不同的产品旁边。因此,当父页面的URL重新加载并添加哈希"page.aspx#x1"时,浏览器将滚动到该元素。

<a id="x1"></a>

我想你已经在父页面上有了这个链接按钮,将成为回发的目标

<asp:LinkButton ID="callbackbtn" runat="server" />

在弹出的颜色框中,您需要将锚点Id传回父

window.parent.callbackfromchild('x1')

或者它是一个弹出窗口,你可以这样称呼它

window.opener.callbackfromchild('x1')

您可以在打开弹出窗口之前将当前滚动位置放入cookie中,并在窗口上重新应用它。在本地,我使用jQuery.scrollTo插件执行此类任务,它可以完美地进行