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

时间:2013-08-15 12:38:48

标签: javascript jquery asp.net dopostback

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

用户进行购买后(单击发送到数据库信息的按钮等): 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);
            };

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您需要在父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>

我猜你已经在父页面上有这个Linkbutton,将成为回发的目标

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

在colorbox弹出窗口中,您需要将锚点ID传递回父级

window.parent.callbackfromchild('x1')

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

window.opener.callbackfromchild('x1')

答案 1 :(得分:0)

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