href="javascript:;" or href="javascript:void(

href="javascript:;" or href="javascript:void(0)", the difference?

本文关键字:quot javascript href or void      更新时间:2023-09-26

我读到了href="#"href="javascript:void(0)"比较,我还想知道关于

href="javascript:;" or href="javascript:void(0)"

ps:我一直用href="javascript:;"而不是href="javascript:void(0)",没有发现任何麻烦。

在超链接中使用javascript:无论哪种形式都是不好的。你的JavaScript设计应该是不引人注目的。

如果要将事件侦听器附加到定位点,则应使用#锚点甚至实际 URL,例如:

<a href="/delete/post/123">delete</a>
...
<script>
jQuery(function($) {
     $('a').on('click', function(event) {
         event.preventDefault();
         // do ajax stuff
     });
});
</script>

这样,旧浏览器(或禁用JavaScript的浏览器)将遵循常规链接删除项目,而启用JavaScript的浏览器将通过AJAX执行此操作,以便页面不必刷新。

如果你的链接真的什么都不做,你根本不应该使用锚点;只需为此目的设置一个<span>

你在href中输入的内容并不真正相关。您应该首先通过从单击处理程序返回false来阻止链接被跟踪。

例:

<a href="fallback.html" onclick="doSomething();return false;">

href中,您可以为已禁用Javascript的用户放置指向后备解决方案的链接,或者通知他们需要Javascript才能使用该页面功能的页面。

javascript:void(0) - 比JavaScript:some_code_to_execute更容易理解。当然,在你的情况下 javascript:;并不难读,是不会假设代码被破坏了。

有几个原因,为什么用javascript处理lcicks是不好的。我知道这不是实际的问题,但它是相关的:

  1. 这种方法已经过时,并且由于浏览器供应商仍然支持它,因此它不在 wc3 标准中。
  2. 链接 href="javascript" 不适用于没有 javascript 的用户。最好使用 href="/somePage.com?id=123" onclick="makeActionFor(777);返回假">
  3. 标记和代码之间没有分离。在这种情况下,在 prev 示例中放置 onclick 也是附加点击处理程序的糟糕方法。

javascript:链接的通常行为是将文档正文替换为表达式计算的任何内容,除非它的计算结果为 undefined 。您的两个版本之间没有区别,它们都评估为undefined,在javascript:链接中,没有影响。

但是,这不是创建无操作链接的首选方法。你不必要地强迫浏览器解析和评估JavaScript。如果要创建一个不执行任何操作的链接,则应将其href设置为 "#" ,并将函数绑定到链接的 click 事件。事件处理程序将传递一个事件对象;如果要计算某些代码,然后阻止跟踪链接(将#附加到当前 URL),则可以使用 event.preventDefault()event.stopPropagation() 或只是从事件处理程序返回false

最好的选择是在href属性中维护一些有意义的值,这样如果 JavaScript 被规避(即用户在新窗口中打开链接),仍然有一些理智的回退。然后,您应该在现有的仅 HTML 功能之上分层其他"丰富"操作。