码农日记

薄洪涛的个人博客

a标签导致局部刷新调到页面顶部

起因

在做后台列表的时候,我做了一个详情的查看,如图,点击详情的时候,会发起一个异步请求,去后台请求数据,局部刷新页面,展示出来,如下图所示,点击红框内的详情按钮,会展开详情但是会回到页面顶部列表图片

但是出现一个奇怪的事情,当把上面的详情点开后,撑开了整个页面,然后点击最下面的详情,会自动回到当前页面的顶部,而且页面是不刷新的,所以肯定不是页面刷新导致的

解决

经过一番查找,终于知道了原因,是因为a标签的原因通常,我定义一个a标签,当这个a标签是一个空链接而且我们想给他加点击事件的时候,会这么写

<a href="#" class="btn btn-primary btn-xs" onclick="detail(<?= $result['id'] ?>)">详情</a>

问题就出在#号,改成这样就可以了

<a href="javascipt:void(0);" class="btn btn-primary btn-xs" onclick="detail(<?= $result['id'] ?>)">详情</a>

或者这样

<a href="##" class="btn btn-primary btn-xs" onclick="detail(<?= $result['id'] ?>)">详情</a>

总结了下a标签的写法

1.<a href="#"></a>

2.<a href="#nogo"></a>

3.<a href="##"></a>

4.<a href="###"></a>

5.<a href="javascript:void(0);"></a>

6.<a href="javascript:void(0)"></a>

7.<a href="javascript:;"></a>

8.<a href="javascript:"></a>

点击第一个链接后,会让页面跳到头部,window.location.href末尾增加# 

第二个,有了初步的语义。但是,如果页面里面有id为nogo的元素,点击这个链接后,锚点机制会作用,页面贴齐这个元素上 

第三,在chrome中不再默认跳转到页面头部 

第四,在IE11中不再跳转到页面头部 

5~8作用相同,但使用了javascript伪协议。在IE6下面,未加分号的方案6和方案8被点击后,IE6会使得页面中的gif暂停,并且触发onbeforeunload事件(详情参考这里),IE6认作这个页面有了重定向,并abort之后所有的请求(参考这里)。所以假如你在此之后替换了一个的src,IE6完全不会完成这个新的请求。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处