锚点或按钮

Fre*_*red 7 html semantic-markup htmlbutton

我应该使用什么元素进行JavaScript操作?

执行播放/暂停/停止/新建/打开/保存/打印/关闭等操作.

<a id="play" href="#">Play</a>
<a href="#play">Play</a>
<button id="play" tabindex="0">Play</button>
<div id="play" role="button" tabindex="0">Play</div>
Run Code Online (Sandbox Code Playgroud)

我看到很多人用锚<a>用href="#",但并不觉得很语义,感觉就像锚是指向一个资源,不为,做东西的动作的超链接.然后你必须用event.preventDefault(即return false)破解它.

我很少看到人们使用该<button>元素,但它不应该被用于什么?

Arc*_*oob 13

太长了;您可以在新选项卡/窗口中打开锚链接,但不能在按钮中打开。

这是一个经验法则:

  • 对于导航,只需使用锚点即可将其样式设置为按钮并让它href很好地使用其属性。

  • 对于快速操作(播放、暂停、停止、+1 等),只需使用它没有的按钮href!

考虑这段代码。

const [anchor] = document.getElementsByTagName('a')
const [button] = document.getElementsByTagName('button')

anchor.addEventListener('click', e => {
  console.log('anchor clicked')
  e.preventDefault()

}, false)

button.addEventListener('click', e => {
  console.log('button clicked')
})
Run Code Online (Sandbox Code Playgroud)
a {
  text-decoration: none;
  padding: 2px;
}


button {
  background: none;
  border: none;
  font-size: 16px;
}

.btn {
  background-color: blue;
  color: white;
  display: inline-block;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
<a class="btn" href="#">
  Anchor
</a>

<hr/>

<button class="btn" type="button">
  Button
</button>
Run Code Online (Sandbox Code Playgroud)

造型

它们看起来几乎很相似(几乎没有什么理由),唯一的问题是您必须撤消一些带有buttonlike border&的样式background,但使用锚点时,您不会像使用按钮那样获得点击弹出动画。

功能性

但由于锚点<a>需要<a href="some/path">工作,即使它只是#,除非您需要在单击锚点后进行导航,否则您必须e.preventDefault()在 JavaScript 中使用它来阻止它。


Que*_*tin 6

确定哪个元素对基于 JS 的用户交互具有最佳语义的最佳方法是询问如果 JS 失败(它将.

认为渐进增强。想想不引人注目的 JavaScript。

用户应该去另一个页面吗?使用链接。这href将是 JS 失败时的后备。

用户在发送一些数据或发出 POST 请求时是否应该转到另一个页面?使用一个按钮,把它放在一个表单中。

是否不可能有任何类型的服务器回退?使用 a<button type="button">并考虑从 JS/DOM 而不是 HTML 生成它。