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