2015-05-08 3 views
3

У меня есть регулярное событие интервала времени в javascript, который нажимает кнопку asp. Приложение является частым чатом, и я должен обновить gridview (который находится внутри панели), чтобы проверить новые чаты. Но каждый раз, когда кнопка нажата, а gridview обновляется, панель прокручивается вверх (т. Е. Значение scrollTop становится равным 0). Я попытался это, но безрезультатно: -Как сохранить положение прокрутки независимо от обратной передачи?

<script type="text/javascript"> 
    function refresh() { 
     setInterval(function() { 
      var xtop = document.getElementById("Panel1").scrollTop; 
      document.getElementById("Button2").click(); 
      document.getElementById("Panel1").scrollTop = xtop; 
     }, 1000); 
    } 
    </script> 

ответ

0

Если вы хотите сохранить позицию прокрутки между постбэков в вашей refresh() функции вы можете сохранить значение позиции прокрутки в скрытом поле, которое вы положили где-то в HTML : <input type="hidden" id="scroll"></input> с помощью JavaScript

document.getElementById("scroll").value = document.getElementById("Panel1").scrollTop; 

есть и другие варианты для сохранения данных, таких как печенье и ASP.NET ViewState, но скрытое поле проще всего для этой цели. Затем вы можете прочитать это значение из скрытого поля при загрузке DOM и прокрутить окно до этой позиции.

Однако, если вы отправляете назад каждую секунду, чтобы проверять наличие новых сообщений, у вас, вероятно, есть большая проблема. Такая функциональность лучше выполняется асинхронно с AJAX. Это потребует немного изучения, поскольку я не уверен в вашей реализации здесь, но по существу вы будете использовать JavaScript, чтобы спросить у сервера, есть ли новые сообщения и загружать их с сервера асинхронно, тем самым устраняя использование обратных передач.

Here is Mozilla's introduction to AJAX.

Смежные вопросы