zoukankan      html  css  js  c++  java
  • href="#" 和href="javascript:void(0);" 这哪个好些

    href="#"  和href="javascript:void(0);" 这哪个好些 ?

      在说这个问题之前,我想应该思考一下,我们为什么要在页面不需要跳转的情况下选择<a>标签?

      其实很大程度是是因为IE6,IE6只支持<a>的:hover伪类,所以要为了节约javascript来模拟hover的编码,<a>就是一个很好的选择。

      但是使用<a>会导致一个问题:如果不添加href属性,那么css里的hover效果将会失效,如果添加了href,那么href应该何去何从呢.大部分情况下我们都不希望它跳转(阻止跳转).

    而阻止跳转常见的有下面四种方式: 

    1. <a href="javascript:;" onclick="action();">link</a> 

    2. <a href="javascript:void(0);" onclick="action();">link</a> 

    3. <a href="###" onclick="action();">link</a> 

    4. <a href="#" onclick="action();return false;">link</a>  

    事实上这四种方式都可以很正常的工作。

      第1和第2中可以归为一类,使用javascript 伪协议,只要什么都不返回,那么浏览器将不会跳转

      第3种比较有意思,它使用了一个锚点(跳转到id或name为##的位置),在浏览器中, 如果一个锚点不存在,那么也不会跳转

      第4种是在执行onclick的最后处加上return false, 这样就阻止了浏览器执行默认行为,同样就阻止了跳转

      我以往的经验都证明第4种是最稳妥的方式,因为第2种和第2种都会在ie6下出现bug:

      当A被点击, action() 函数里如果有设置location,设置img.src,设置iframe.src 行为,从而导致一个新的资源下载时,ie6会中断掉该行为。

      比如这位朋友的记录:http://www.cnblogs.com/kaima/archive/2008/08/22/1273808.html 作者文中最后推荐使用空链接"###"。

    二、jquery阻止默认事件

    1 <a href="http://jquery.com">default click action is prevented</a>
    2       <div id="log"></div>
    3        <script>
    4             $("a").click(function(event) {
    5                event.preventDefault();
    6                $('<div/>').append('default ' + event.type + ' prevented').appendTo('#log');
    7              });
    8        </script>

     

    第三种真的稳妥么,或许我们可以猜测一下锚点的工作方式,

      当<a>元素被点击,浏览器发现href="###" ,首先要判断这个href是否需要跳转到别的页面,如果不需要,那么浏览器会将href后面两个##取出来,然后遍历DOM树,找到第一个id(或者name)的值为##的,调用内部方法,使浏览器滚动到相应的位置 ,如果一个匹配的也没有找到,那么浏览器什么也不做。

    而这个过程中, 浏览器需要做的事情可能还有

    - 启动载入中提示

    - 发出跳转提示音(ie6,ie7) 

    总之,###会导致浏览器执行一系列的默认行为(是否有性能问题?), 包括ie6 7非常讨厌的提示音,而只要我们阻止了默认行为,这一切都不会发生。

    所以结论是,尽量不要使用href="javascript:;" href="###" ,而统一使用 onclick="return false;" ,这是安全的,也是体验最好的。

  • 相关阅读:
    windows权限维持
    pocsuite3检测工具 编写poc
    php异或免杀
    python 多线程ftp爆破
    python ip查询 whois查询 # CDN查询# 子域名查询# 端口扫描
    python src批量爬取
    qykcms 审计
    dedecms审计
    EasySNS 审计
    zzcms审计
  • 原文地址:https://www.cnblogs.com/couxiaozi1983/p/3495679.html
Copyright © 2011-2022 走看看