禁用详细信息/摘要

abe*_*ier 6 html javascript css

当我将新details标签与 a 结合使用时,summary我想禁用生成的输入。我认为

<details open disabled>
Run Code Online (Sandbox Code Playgroud)

可以做到这一点,但遗憾的是它不起作用。

如何禁用详细信息元素?

Joe*_*agy 18

一个非常简单的方法是仅使用 CSS。如果您愿意,您仍然可以使用该disabled属性或将其改为 a 。设置为 时的声明class使标签对鼠标不可见(因此标签下方的元素将是可点击的)。添加到禁用标签中以消除键盘焦点。pointer-eventsnonesummarytabindex="-1"summary

<details open disabled>
  <summary tabindex="-1">click here: [disabled]</summary>
  <p>content</p>
</details>

<details open class="disabled">
  <summary tabindex="-1">click here: .disabled</summary>
  <p>content</p>
</details>

<details open>
  <summary>click here: NOT disabled</summary>
  <p>content</p>
</details>

<style>
  details[disabled] summary,
  details.disabled summary {
    pointer-events: none; /* prevents click events */
    user-select: none; /* prevents text selection */
  }
</style>
Run Code Online (Sandbox Code Playgroud)

https://codepen.io/joelnagy/pen/MWKNGGp


bfa*_*tto 5

disabled您可以在<details>元素上设置单击处理程序,而不是使用不存在的属性,并从那里阻止默认事件行为。快速而肮脏的方式是:

<details open onclick="return false">
    <summary>Click here</summary>
    <p>content</p>
</details>
Run Code Online (Sandbox Code Playgroud)

正确的方法是使用addEventListener

<details id="mydetails" open>
    <summary>Click here</summary>
    <p>content</p>
</details>

<script>
document.getElementById('mydetails').addEventListener('click', function(e) {
    e.preventDefault();
});
</script>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/L8HUZ/1/

为了解决你在评论中提到的焦点问题,添加tabindex="-1"一个属性<summary>以防止它获得键盘焦点。请注意,我不确定这是否适用于每个浏览器,并且focus即使使用该属性,单击时仍会触发事件。