次の(一見一般的な)メソッドを使用して、送信時にスクロール位置をphpページに保存します。
<script type="text/javascript">
<!-- script for scroll position on submit -->
function saveScrollPositions(theForm) {
if(theForm) {
var scrolly = typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement.scrollTop;
var scrollx = typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement.scrollLeft;
theForm.scrollx.value = scrollx;
theForm.scrolly.value = scrolly;
}
}
</script>
</head>
<body>
<form id="ReportForm<?php echo $userNumber; ?>" name="ReportForm" method="POST" action="<?php echo $editFormAction; ?>" onsubmit="return saveScrollPositions(this);">
<input type="hidden" name="scrollx" id="scrollx" value="0" />
<input type="hidden" name="scrolly" id="scrolly" value="0" />
-- various form controls here --
</form>
<?php
$scrollx = 0;
$scrolly = 0;
if(!empty($_REQUEST['scrollx'])) {
$scrollx = $_REQUEST['scrollx'];
}
if(!empty($_REQUEST['scrolly'])) {
$scrolly = $_REQUEST['scrolly'];
}
?>
<script type="text/javascript">
window.scrollTo(<?php echo "$scrollx" ?>, <?php echo "$scrolly" ?>);
</script>
</body>
本文では、データベースから複数のレポートを取得するためにフォームが繰り返し領域でラップされていますが、実行時にロードされたページの各フォームには一意の ID が必要なので、フォームタグに次のように記述します。
id="reportForm<?php echo $userNumber ?>"
これにより、saveScrollPositions が失敗します。最後に追加された userNumber を削除すると機能します。どうすればこれを修正できますか?
この件に関してご協力いただけることを大変感謝しております。今後ともよろしくお願いいたします。
敬具、ジョン