我的Laravel应用程序中有简单的评论系统。问题是有人提交评论页面正在页面顶部重新加载。我希望该页面返回用户在原始评论的相同位置(保持滚动位置)。
以下是负责评论的视图的一部分:
@if ($signedIn)
{{ Form::open(['route' => ['comment_path', $status->id], 'class' => 'comments__create-form',]) }}
{{ Form::hidden('status_id', $status->id) }}
<div class="form-group">
{{ Form::textarea('body', null, ['class' => 'form-control', 'rows' => 1]) }}
</div>
{{ Form::close() }}
@endif
@unless ($status->comments->isEmpty())
<div class="comments">
@foreach ($status->comments as $comment)
@include ('statuses.partials.comment')
@endforeach
</div>
@endunless
这是jquery脚本,当有人点击ENTER
时提交评论<script>
$('#flash-overlay-modal').modal();
$('.comments__create-form').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$(this).submit();
}
});
</script>
感谢您的帮助!
答案 0 :(得分:6)
好吧,我尝试了所有可用的解决方案,当你在我的页面上有很多表单时,它们并没有完美地工作。
感谢Evalds Urtan我解决了这个问题。 Evalds有最好和最短的脚本来保持滚动位置。
你不需要做任何事情,只需要包含他的jquery
/*
* Maintain / Keep scroll position after post-back / postback / refresh. Just include plugin (no need for cookies)
*
* Author: Evalds Urtans
* Website: http://www.evalds.lv
*/
(function($){
window.onbeforeunload = function(e){
window.name += ' [' + $(window).scrollTop().toString() + '[' + $(window).scrollLeft().toString();
};
$.maintainscroll = function() {
if(window.name.indexOf('[') > 0)
{
var parts = window.name.split('[');
window.name = $.trim(parts[0]);
window.scrollTo(parseInt(parts[parts.length - 1]), parseInt(parts[parts.length - 2]));
}
};
$.maintainscroll();
})(jQuery);
谢谢Evalds!