href=”javascript:void(0);

href=”javascript:void(0);”这个的含义是,让超连接去执行一个js函数,而不是去跳转到一个地址,而void(0)表示一个空的方法,也就是不执行js函数。

为何要使用href=”javascript:void(0);”

javascript:是伪协议,表示url的内容经过javascript执行。void(0)表示不做任何操做,这样会防止连接跳转到其余页面。这么作每每是为了保留连接的样式,但不让连接执行实际操做javascript

<a href="javascript:void(0)" onClick="window.open()"> 点击连接后,页面不动,只打开连接html

<a href="#" onclick="javascript:return false;"> 做用同样,但不一样浏览器会有差别。java

 

 

https://www.cnblogs.com/cyjy/p/6182587.htmlajax

------------------------------分割线--------------------------------------

修正一个说法上的bug吧。对于IE6来讲,点击后gif暂停bug仅仅发生在“javascript:伪协议未加分号”的情形下。chrome

<a>标签增长href属性,就意味着如下事情:segmentfault

  • :link选择器能够选择到它
  • 这个a标签能够得到焦点(能够经过tab按键访问到)
  • 在浏览器的默认样式表中,有href属性的<a>标签才有cursor:pointer的效果(尤为是在低版本的IE上)。

绑定了onclick事件的<a>标签,尤为是它的做用是ajax请求时,基本上咱们就用不上这个标签的默认行为,也链接不到的实际页面,通常而言也会在CSS里给予了这个元素的cursor等样式。这时候还要加上href属性,是为了:浏览器

  • <a>够响应键盘事件并得到焦点(从而屏幕阅读器可以读出背后的内容,加强可访问性)
  • 优雅降级,在网络链接不好,尚未加载到CSS的时候,<a>依然有手型与正常的link样式。

<a>标签以href属性,并不链接到实际的页面的方案有网络

  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>

他们的体验有细微的差异。wordpress

  • 1,点击这个连接后,会让页面跳到头部,window.location.href末尾增长#(若window.location.href末尾没有#),除非在js里面捕获onclick事件并阻止默认事件。
  • 2有了初步的语义。可是,若是页面里面有id为nogo的元素,点击这个连接后,锚点机制会做用,页面贴齐这个元素上缘。更详细的,详见张鑫旭的《URL锚点HTML定位技术机制、应用与问题
  • 3在chrome中再也不默认跳转到页面头部,4在IE11中再也不跳转到页面头部。见下方测试。
  • 5~8做用相同,但使用了javascript伪协议。在IE6下面,未加分号的方案6和方案8被点击后,IE6会使得页面中的gif暂停,而且触发onbeforeunload事件(详情参考这里),IE6认做这个页面有了重定向,并abort以后全部的请求(参考这里)。因此假如你在此以后替换了一个<img>的src,IE6彻底不会完成这个新的请求。

我更倾向于使用方案4。函数

至于语义上LZ这种<a href="javascript:void(0)">使用方式,这个贴里已经有了足够详细的回答。我再补充一点,这种情形依然能够作到支持无障碍应用,方法请参考《WAI-ARIA无障碍网页应用属性》。


更新,我作了以下的测试:

<p> <a href="#">#</a> </p> <p> <a href="##">##</a> </p> <p> <a href="###">###</a> </p> <p> <a href="####">####</a> </p> <p> <a href="#####">#####</a> </p> <script type="text/javascript"> var n = 0 ; window.onhashchange = function(){ alert(++n) ; } </script> 
  • 在IE11中,点击###、####和#####时,页面再也不跳转到头部
  • 在chrome中,点击##、###、####和#####时,页面再也不跳转到头部。
  • 可是在IE11和chrome中,点击全部的<a>都会形成地址栏的修改,并触发hashchange事件。

因此以前说的“###不会形成地址栏的改变”是错误的。

没有大规模测试其余的浏览器,这里作初步猜测:###的意义在于,这是字符数最少的,在全部的浏览器中不会致使跳转到页面头部的锚点。

 

坏处:

一、javascript: 是伪协议,是非标准化的协议
二、不能平稳退化,当用户的浏览器对JS失效或禁用时点击后什么意义都没有
三、大部分搜索引擎不会搜索到它,由于没有内容,从而影响排名 (# 是否是也算上空链?空链对搜索引擎也不友好)


解决方法:

一、将 javascript:、 #、 ### 替换成真实网址,并取消 <a> 的默认点击事件,return false 或event.preventDefault,若是JS失效了该连接虽功能上打了些折扣,但并无完全失效,作到了“平稳退化”

如:本网站侧边栏的“邀请回答”的 http://segmentfault.com/q/1010000000339082# 能够替换成真实地址http://segmentfault.com/q/1010000000339082,而后继续它以后的事件

二、将不应是按钮的改为按钮。好多人都在“烂”用 <a>,每一个人都想让它去完成 <button> 的事情,可看下这篇文章《你不能创造一个按钮》,讲的有些道理

 

 

 

https://www.cnblogs.com/pp-cat/p/4308736.html

相关文章
相关标签/搜索