Перезагрузите и запомните положение прокрутки после возврата из всплывающего окна.

У меня есть страница с товарами и у каждого товара есть ссылка: "Купить". После нажатия на ссылку появится всплывающее окно, в которое будет встроен другой файл .aspx. (всплывающее окно генерируется плагином Colorbox)

После того, как пользователь совершает покупку (нажатие на кнопку, которая отправляет информацию в БД и т. д.): 1. всплывающее окно должно закрыться 2. родительская страница должна быть перезагружена 3. положение прокрутки должно быть сохранено

Проблема в том, что положение прокрутки не сохраняется (особенно в браузере IE).

Что пробовал: 1.

 MaintainScrollPositionOnPostback="true" -- had no effect

А также:

Всплывающая страница:

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

Родительская страница: function callbackfromchild(arg) {

            __doPostBack("callbackbtn", "");

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

Что я делаю не так?


person Xmsss    schedule 15.08.2013    source источник


Ответы (2)


Вам нужен этот скрипт на родительской странице 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>

И вам нужно, чтобы этот якорь с идентификатором использовался как параметр функции из всплывающего окна, размещенного рядом с каждым продуктом с разными идентификаторами. Поэтому, когда URL-адрес родительской страницы перезагружается с добавленным к нему хэшем "page.aspx#x1", он заставит браузер прокручивать этот элемент.

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

И я предполагаю, что у вас уже есть эта кнопка Link на родительской странице, и она станет целью обратной передачи.

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

Во всплывающем окне colorbox вам нужно передать идентификатор привязки обратно родительскому

window.parent.callbackfromchild('x1')

Или это было всплывающее окно, вы бы назвали его так

window.opener.callbackfromchild('x1')
person Michael B.    schedule 15.08.2013

Вы можете поместить текущую позицию прокрутки в файл cookie перед открытием всплывающего окна и повторно применить его к window.onload, я использую плагин jQuery.scrollTo для таких задач, он отлично работает.

person AElsh    schedule 15.08.2013