【问题标题】:What does href expression <a href="javascript:;"></a> do?href 表达式 <a href="javascript:;"></a> 有什么作用?
【发布时间】:2011-12-06 23:49:17
【问题描述】:

我不时在网页中看到以下href。但是,我不明白这是试图做什么或技术。谁能详细说明一下?

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

【问题讨论】:

  • 如果我没记错的话,你可以用这个调用 JS 方法.. javascript:SomeFunction()
  • 它不会尝试做任何不能通过适当的点击处理程序更好地处理的事情。您应该避免这种情况,因为它丑陋、难以访问,并导致人们在不应该使用它的地方使用 javascript: 方案 (onclick="javascript:…")

标签: javascript


【解决方案1】:

&lt;a&gt; 元素是无效的 HTML,除非它具有 hrefname 属性。

如果您希望它正确呈现为链接(即下划线、手形指针等),那么只有当它具有href 属性时才会这样做。

因此,这样的代码有时被用作建立链接的一种方式,但不必在href 属性中提供实际的 URL。开发人员显然希望链接本身不做任何事情,这是他所知道的最简单的方法。

他可能在其他地方有一些 javascript 事件代码,当点击链接时触发,这将是他想要实际发生的事情,但他希望它看起来像一个普通的 &lt;a&gt; 标记链接。

一些开发人员出于相同目的使用href='#',但这会导致浏览器跳转到页面顶部,这可能是不想要的。而且他不能简单地将href留空,因​​为href=''是一个返回当前页面的链接(即它会导致页面刷新)。

有很多方法可以解决这些问题。在href 中使用一段空的 Javascript 代码就是其中之一,虽然它不是最好的解决方案,但它确实有效。

【讨论】:

  • 出于好奇,有没有更好的方法来做到这一点?
  • 更好的做法是,如果事件函数执行return false;event.preventDefault(),则永远不会调用href 操作,因此您可以在其中放置更明智的内容。跨度>
  • 一个没有hrefname&lt;a&gt; 是无效的;这可以使用验证器轻松检查。
  • 根据规范,片段(# 部分)甚至不应该被发送到网络服务器,所以你的浏览器很可能在那里做错了。
  • 对@YoshieMaster 所说的,是的。如果 URL 有 # fragment,则永远不会发送到 Web 服务器(或因此发送到防火墙);它仅由浏览器内部使用。在这种情况下,单击标记为&lt;a href="#"&gt;...&lt;/a&gt; 的链接不会导致您的浏览器在任何地方发送任何HTTP 请求;它所要做的就是滚动到页面顶部。
【解决方案2】:

基本上不是使用链接来移动页面(或锚点),而是使用此方法启动 javascript 函数

<script>
function doSomething() {
  alert("hello")
}
</script>
<a href="javascript:doSomething();">click me</a>

点击链接将触发警报。

【讨论】:

    【解决方案3】:

    有几种机制可以避免链接到达其目的地。问题中的那个不是很直观。

    更简洁的选项是使用href="#no",其中#no 是文档中未定义的锚点。

    您可以使用更具语义的名称,例如 #disable 或 #action 来提高可读性。

    该方法的好处:

    • 避免空 href="#" 的“移到顶部”效果
    • 避免使用 javascript

    缺点:

    • 您必须确保文档中没有使用锚名称。
    • URL 更改为包含(不存在的)锚点作为片段,并创建了一个新的浏览器历史记录条目。这意味着在单击链接后单击“返回”按钮将无法正常运行。

    由于&lt;a&gt; 元素不充当链接,因此在这些情况下,最好的选择不是使用&lt;a&gt; 元素,而是使用&lt;div&gt;,并提供所需的类似链接的样式。

    【讨论】:

    • 我也喜欢未定义的锚点。但是,另一个缺点是它会将锚点添加到您的浏览器历史记录中,因此我选择在 OP 中使用空白 JS 方法。
    【解决方案4】:
    <a href="javascript:alert('Hello');"></a>
    

    只是以下的简写:

    <a href="" onclick="alert('Hello'); return false;"></a>
    

    【讨论】:

    • 有点,但它不是一个真正的“喜欢对喜欢”的比较。这就是一些人一开始就陷入使用它的陷阱的原因。
    【解决方案5】:

    参考这个:

    <a href="Http://WWW.stackoverflow.com">Link to the website opened in different tab</a>
    <a href="#MyDive">Link to the div in the page(look at the chaneged url)</a>
    <a href="javascript:;">Nothing happens if there is no javaScript to render</a>
    

    【讨论】:

      【解决方案6】:

      这是一种让链接在单击时完全不执行任何操作的方法(除非绑定了 Javascript 事件)。

      这是一种运行 Javascript 而不是跟随链接的方式:

      <a href="Javascript: doStuff();">link</a>
      

      当实际上没有运行 javascript 时(如您的示例),它什么也不做。

      【讨论】:

      • 啊,我明白了。它有效地禁用了链接。
      【解决方案7】:

      它用于在href 内部编写js 代码,而不是像onclick 这样的事件侦听器,并避免href 中的# 链接以使a 标记对HTML 有效。

      有趣的事实

      我研究了如何在href属性中使用javascript:,结果我可以在里面写多行

      <a href="
           javascript:
              a = 4;
              console.log(a++); 
              a += 2; 
              console.log(a++); 
              if(a < 6){ 
                  console.log('a is lower than 6');
              } 
              else 
                  console.log('a is greater than 6');
              function log(s){
                  console.log(s);
              }
              log('function implementation working too');
      
      ">Click here</a>
      
      • 在 chrome 版本 68.0.3440.106(官方构建)(64 位)中测试

      • 在 Firefox Quantum 61.0.1(64 位)中测试

      【讨论】:

      • 这很有趣——虽然绝对可怕。您的回答终于解释了这实际上意味着什么:)
      【解决方案8】:
      <a href="javascript:void(0);"></a>
      

      javascript: 告诉浏览器要编写javascript代码

      【讨论】:

        【解决方案9】:

        旧线程,但我想我只是补充一下,开发人员使用此构造的原因不是创建死链接,而是因为 javascript URL 出于某种原因没有正确传递对活动 html 元素的引用。

        例如handler_function(this.id) 可用作 onClick,但不能用作 javascript URL。

        因此,您可以选择编写符合标准的代码,您必须手动调整每个超链接的调用,或者编写一次可以在任何地方使用的稍微不标准的代码。

        【讨论】:

          【解决方案10】:

          由于这是一个样式问题,您可以/应该使用 W3 valid 解决方法,而不是使用无效语法污染 HTML:

          1. 正确格式化 HTML,不带 href,在 W3 accessibility guide lines for buttons 之后。
          2. 使用 CSS 来解决在控件上应用可点击 UX 效果的初始目标。

          这是一个 live example 供您试用 UX。

          HTML

              <a role="button" aria-pressed="false">Underlined + Pointer</a>
              <a role="button" aria-pressed="false" class="btn">Pointer</a>
          

          CSS

              a[role="button"]:not([href]):not(.btn) { text-decoration: underline; }
              a[role="button"]:not([href]) { cursor: pointer; }
          

          【讨论】:

          • 社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(参见here)。
          【解决方案11】:

          我正在寻找一种不刷新页面但在 Ipad 和手机上打开菜单项的解决方案。 我也在手机上试过,效果很好

          &lt;a href="#" onclick="return false;"&gt;Dr&lt;/a&gt;

          【讨论】:

            【解决方案12】:
                1. Use that java script to Clear an HTML row Or Delete a row using the id set to a span and use JQuery to set a function to that span's click event.
                2. Dynamically set the div html to a string variable and replace {id} with a 1 or 2 etc. cell of a larger div table and rows
            
            <div class="table-cell">
                <span id="clearRow{id}">
                    <a href="javascript:" style-"color:#c32029; align:right; font-size:8pt;">Clear</a>
                </span>
            </div>
            
            <div class="table-cell">
               <span id="deleteRow{id}">
                   <a href="javascript:" style-"color:#c32029; align:right; font-size:8pt;">Delete</a>
               </span>
            </div>
            
            //JQuery - Clear row
            $("#clearRow" + idNum).click(function(){
                $("someIDOrWildcardSelector" + idNum).val("");
                $("someIDOrWildcardSelector" + idNum).val("");
                $("someIDOrWildcardSelector" + idNum).val("");
            });
            
            //JQuery to remove / delete an html row
            $("#deleteRow" + idNum).click(function(){
                //depending upon levels of parent / child use 1 to many .parent().parent().parent()
                $(this).parent().remove();
            });
            

            【讨论】:

              【解决方案13】:

              始终正确呈现链接的最佳方法是使用 css,如下所示:

              a {cursor: pointer !important}
              

              人们应该避免遵循线程中提到的不必要的事情。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-07-28
                • 2014-06-06
                • 2011-06-10
                • 2016-07-20
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多