将JavaScript代码放在<a>中的不同方法之间有什么区别?

Dar*_*ein 83 html javascript href

我已经看到了将JavaScript代码放入<a>标记的以下方法:

function DoSomething() { ... return false; }
Run Code Online (Sandbox Code Playgroud)
  1. <a href="javascript:;" onClick="return DoSomething();">link</a>
  2. <a href="javascript:DoSomething();">link</a>
  3. <a href="javascript:void(0);" onClick="return DoSomething();">link</a>
  4. <a href="#" onClick="return DoSomething();">link</a>

我理解尝试放置有效URL而不仅仅是JavaScript代码的想法,以防用户没有启用JavaScript.但是为了讨论的目的,我需要假设启用了JavaScript(没有它就无法登录).

我个人喜欢选项2,因为它可以让你看到将要运行的内容 - 在调试传递给函数的参数时尤其有用.我已经使用了很多,并没有发现浏览器问题.

我读过人们推荐4,因为它给了用户一个真实的链接,但实际上,#不是"真实的".它绝对不会在哪里.

当您知道用户启用了JavaScript时,是否有一个不支持或非常糟糕?

相关问题:JavaScript链接的Href:"#"或"javascript:void(0)"?.

cow*_*god 67

我非常喜欢Matt Kruse的Javascript Best Practices文章.在其中,他声称使用该href部分执行JavaScript代码是一个坏主意.即使您已声明您的用户必须启用了JavaScript,但href如果有人在登录后出现关闭JavaScript的情况,您也无法拥有所有JavaScript链接指向其所在部分的简单HTML页面.我强烈建议你继续允许这种后备机制.这样的事情将遵循"最佳实践"并实现您的目标:

<a href="javascript_required.html" onclick="doSomething(); return false;">go</a>
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用title属性覆盖此值,例如<a href="javascript_required.html" title="Does Something" onclick="doSomething(); return false;"> go </a> (5认同)
  • 因为href值将在状态栏中显示给用户?(底部的栏)我会考虑使用更友好的用户链接,例如."js.html?doSomething"页面仍然可以是静态html.这样,用户将清楚地看到链接之间的差异. (4认同)
  • 你有没有想过SEO的后果? (2认同)

eye*_*ess 10

为什么要在使用addEventListener/ attachEvent?时这样做?如果没有href等价,请不要使用a <a>,使用a <button>并相应地设置样式.

  • 在许多情况下,使用按钮而不是链接不是一个可行的选择. (9认同)
  • 按钮是(喘气)语义正确.跨度在语义上毫无意义.一个按钮*正好是作者打算在语义上使用的*. (3认同)
  • 因为它看起来很难看.您可以在链接旁添加图标.它们很难跨浏览器格式化.一般来说,人们正在转向链接而不是按钮 - 看看堆栈流量的大部分. (2认同)
  • 看起来很难看?它看起来像你想要它的样子.事实上,我认为按钮实际上比链接具有更多的样式灵活性,因为它们是内联的,但可以正确地跨浏览器填充.关于CSS,可以使用按钮完成链接可以完成的任何操作. (2认同)
  • 跨度不能以键盘为中心. (2认同)

nic*_*ckf 5

你忘记了另一种方法:

5: <a href="#" id="myLink">Link</a>
Run Code Online (Sandbox Code Playgroud)

使用 JavaScript 代码:

document.getElementById('myLink').onclick = function() {
    // Do stuff.
};
Run Code Online (Sandbox Code Playgroud)

我无法评论哪些选项支持最好,哪些在语义上最好,但我只想说我更喜欢这种风格,因为它将您的内容与您的 JavaScript 代码分开。它将所有 JavaScript 代码保存在一起,这更容易维护(尤其是当您将其应用于许多链接时),您甚至可以将其放在一个外部文件中,然后可以将其打包以减少文件大小并由客户端浏览器缓存。

  • 如果你有 20 或 30 个不同的 JS 链接,这会变得非常乏味,最终会产生很多 JS。 (7认同)
  • @JKirchartz 是的,我认为您当时并没有真正了解 Stack Overflow 的目的。如果有人问“用 Cobol 还是 Fortran 构建 Web 应用程序哪个更好?” 告诉那个人他们没有考虑过所有的可能性是可以接受的。问题显然不是在问“**这四件事中哪一件**是最好的”。 (3认同)