Проблема: Необходимо создать форму Infopath 2010 для публикации на Sharepoint. В случае если форма содержит несколько представлений (view), при переключении на следующее представление, позиция прокрутки остается на том же месте, где она была в предыдущем представлении.
Поиск решения: Рекомендации не делать больших форм, как решение не подходит. В процессе поиска выяснил, что все формы рендерятся через одну страницу (FormServer.aspx), которая получает в качестве параметра путь к xsn-файлу.
Решение: Добавить в эту страницу javascript-код, который будет скроллировать вверх, если изменялось представление внутри формы. Отслеживание изменения представления ведется через параметр в стилях. В заголовке страницы имеется ссылка вида <link href="http://server/_layouts/FormResource.aspx?solutionId=ваш_ID_похожий_на_base64&view=0&browser=NetscapeStrict&viewFile=View%2Ecss&version=1" type="text/css" rel="stylesheet" />
Исходя из формата ссылки можно получить активный view и сделать скролл, если он был изменен.
Скрипт, который необходимо добавить в head страницы FormServer.aspx:
Поиск решения: Рекомендации не делать больших форм, как решение не подходит. В процессе поиска выяснил, что все формы рендерятся через одну страницу (FormServer.aspx), которая получает в качестве параметра путь к xsn-файлу.
Решение: Добавить в эту страницу javascript-код, который будет скроллировать вверх, если изменялось представление внутри формы. Отслеживание изменения представления ведется через параметр в стилях. В заголовке страницы имеется ссылка вида <link href="http://server/_layouts/FormResource.aspx?solutionId=ваш_ID_похожий_на_base64&view=0&browser=NetscapeStrict&viewFile=View%2Ecss&version=1" type="text/css" rel="stylesheet" />
Исходя из формата ссылки можно получить активный view и сделать скролл, если он был изменен.
Скрипт, который необходимо добавить в head страницы FormServer.aspx:
<script type="text/javascript" src="/_layouts/jquery-1.6.1.min.js"></script> <script type="text/javascript"> function foo() { $("div, html, body").scrollTop(0); // перебор нескольких тегов сделан для учета обычной формы(скроллится div) // и формы без риббона шарика (скроллится html) } var ViewIndex = ""; $(document).ready(function() { var result = /\&\;view=(\d+)\&\;/.exec($("head").html()); if (result != null && result.length > 1) { if (ViewIndex != result[1]) setTimeout(foo, 100); // почему-то без таймаута скроллинг не срабатывает ViewIndex = result[1]; } }); </script>
Комментариев нет:
Отправить комментарий