use*_*584 4 html javascript jquery twitter-bootstrap twitter-bootstrap-3
我的问题是,当我点击链接(例如第二页)时,它将在屏幕上显示第二页.但是当我重新加载页面时,当前页面没有保存,而是恢复到默认页面.
如何将所需页面从刷新保留到默认页面?
JavaScript的:
<script type="text/javascript">
$(function(){
$('.one').show();
$('.two').hide();
$('.three').hide();
$('#show_one, #show_one1').click(function(){
$('.one').show();
$('.two').hide();
$('.three').hide();
$('.modal').modal('hide');
return false;
});
$('#show_two, #show_two2').click(function(){
$('.one').hide();
$('.two').show();
$('.three').hide();
$('.modal').modal('hide');
return false;
});
$('#show_three, #show_three3').click(function(){
$('.one').hide();
$('.two').hide();
$('.three').show();
$('.modal').modal('hide');
return false;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
HTML:
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="" id="show_one"> One</a></li>
<li><a href="" id="show_two"> Two</a></li>
<li><a href="" id="show_three"> Three</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<a data-toggle="modal" data-target="#myModal"> Modal Dialog</a>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form class="form-horizontal">
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="button" id="show_one1" class="btn btn-info" data-dismiss="modal" aria-hidden="true">One</button>
<button type="button" id="show_two2" class="btn btn-info" data-dismiss="modal" aria-hidden="true">Two</button>
<button type="button" id="show_three3" class="btn btn-info" data-dismiss="modal" aria-hidden="true">Three</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="one">
<div class="row">
<center>
Page 1
</center>
</div>
</div>
<div class="two">
<div class="row">
<center>
Page 2
</center>
</div>
</div>
<div class="three">
<div class="row">
<center>
Page 3
</center>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当您使用javascript更改DOM的状态时,它将重置为页面重新加载时的实际状态.如果您希望能够存储此状态并在重新加载时将DOM呈现为相同的状态,则必须使用localStorage或sessionStorage.在这种情况下,我将使用sessionStorage向您展示如何完成此操作.你可以在这里阅读有关差异的内容 - http://www.w3schools.com/html/html5_webstorage.asp
工作实例
如何实现这一目标的完整工作示例在这里 - http://codepen.io/nitishdhar/pen/DGHkw
您可以切换到某个页面,然后刷新浏览器窗口,它将仅保留在该页面上.
详细说明
首先,您处理节目的方式可以像这样改进 -
您可以向所有链接/按钮添加一个公共类,您希望页面更改事件触发并在其中存储数据属性,以定义在单击时应打开的页面,如下所示 -
对于链接
<li><a href="#" class="show-page" data-page="one"> One</a></li>
<li><a href="#" class="show-page" data-page="two"> Two</a></li>
<li><a href="#" class="show-page" data-page="three"> Three</a></li>
Run Code Online (Sandbox Code Playgroud)
请注意我添加的class&data-page属性.另外我给了一个#到href,这样你就不必在点击事件上返回false.你也可以使用javascript:void(0); 而不是#如果你不希望你的窗口哈希得到更新.
对于按钮也
<button type="button" class="btn btn-info show-page modal-btn" data-page="one" data-dismiss="modal" aria-hidden="true">One</button>
<button type="button" class="btn btn-info show-page modal-btn" data-page="two" data-dismiss="modal" aria-hidden="true">Two</button>
<button type="button" class="btn btn-info show-page modal-btn" data-page="three" data-dismiss="modal" aria-hidden="true">Three</button>
Run Code Online (Sandbox Code Playgroud)
我还在模式内部渲染的按钮上添加了一个modal-btn类.这是为了处理模态中的按钮仅处理模态隐藏事件.没有必要将modal('hide')附加到其他链接.
现在在你的javascript中使它工作,你会做这样的事情 -
$('.show-page').click(function(){
/* Get the Page to Show */
var pageToShow = $(this).data('page');
/* Hide all pages first */
$('.page').addClass('hide');
/* Show the page whose link was clicked */
$('.' + pageToShow).removeClass('hide');
});
$('.modal-btn').click(function() {
$('.modal').modal('hide');
});
Run Code Online (Sandbox Code Playgroud)
因此,我们尝试绑定具有类show-page的每个元素的click事件.然后点击我们读取特定点击元素的数据页面属性中的内容.然后我们隐藏所有页面并仅显示其持有者被点击的页面.这样您就不必为所有按钮编写单独的事件处理程序.
我也分别处理隐藏模态.
使用会话存储
现在会话存储是浏览器存储,它将为当前会话保存一些数据,即在用户关闭浏览器窗口之前.
我们将维护一个变量,该变量将保存用户之前的最后一页,如下所示 -
/* Check if session has some page to show stored */
if(typeof(Storage)!== "undefined" && sessionStorage.getItem('pageToShow')) {
var pageToShow = sessionStorage.getItem('pageToShow');
/* Hide all pages first */
$('.page').addClass('hide');
/* Show the page whose link was clicked */
$('.' + pageToShow).removeClass('hide');
/* Also set this page to session storage */
sessionStorage.setItem('pageToShow', pageToShow);
}
Run Code Online (Sandbox Code Playgroud)
现在,当用户尝试移动到页面时点击事件,我们将继续更新会话变量'pageToShow',类似这样的事情 -
$('.show-page').click(function(){
/* Get the Page to Show */
var pageToShow = $(this).data('page');
/* Hide all pages first */
$('.page').addClass('hide');
/* Show the page whose link was clicked */
$('.' + pageToShow).removeClass('hide');
if(typeof(Storage)!=="undefined") {
sessionStorage.setItem('pageToShow', pageToShow);
}
});
Run Code Online (Sandbox Code Playgroud)
现在,如果用户也刷新页面,我们将首先检查我们是否在会话中设置了pageToShow,如果我们这样做,我们将移动到该页面,就像您想要的那样.
注意:如果您希望pageToShow变量在用户关闭并稍后重新打开浏览器后仍然保留,则可以使用localStorage而不是sesstionStorage.
| 归档时间: |
|
| 查看次数: |
9102 次 |
| 最近记录: |