【问题标题】:Reload and remember the scroll position after coming back from popup从弹出窗口返回后重新加载并记住滚动位置
【发布时间】:2013-08-15 12:38:47
【问题描述】:

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

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

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

我尝试了什么: 1.

 MaintainScrollPositionOnPostback="true" -- had no effect

还有:

弹出页面:

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

父页面: 函数回调子(arg){

            __doPostBack("callbackbtn", "");

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

我做错了什么?

【问题讨论】:

    标签: javascript jquery asp.net dopostback


    【解决方案1】:

    您需要在父 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 的锚点来使用来自 popup 的函数参数 - 放置在每个具有不同 ID 的产品旁边。因此,当父页面的 URL 重新加载并添加了哈希“page.aspx#x1”时,它会使浏览器滚动到该元素。

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

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

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

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

    window.parent.callbackfromchild('x1')
    

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

    window.opener.callbackfromchild('x1')
    

    【讨论】:

      【解决方案2】:

      您可以在打开弹出窗口之前将当前滚动位置放入 cookie 并在 window.onload 上重新应用它,我使用 jQuery.scrollTo 插件来完成此类任务,效果很好

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 2012-03-11
        • 2016-03-07
        • 2012-12-19
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        相关资源
        最近更新 更多