起因
在做后台列表的时候,我做了一个详情的查看,如图,点击详情的时候,会发起一个异步请求,去后台请求数据,局部刷新页面,展示出来,如下图所示,点击红框内的详情按钮,会展开详情但是会回到页面顶部
但是出现一个奇怪的事情,当把上面的详情点开后,撑开了整个页面,然后点击最下面的详情,会自动回到当前页面的顶部,而且页面是不刷新的,所以肯定不是页面刷新导致的
解决
经过一番查找,终于知道了原因,是因为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完全不会完成这个新的请求。