You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免点击HTML details内操作按钮时触发toggle事件?

解决details元素内按钮点击触发toggle的问题

核心问题是summary内的按钮点击事件会冒泡到summary,进而触发details的展开/折叠。通过阻止事件冒泡就能解决这个问题,具体实现如下:

修改后的代码

<details *ngIf="tree" class="form-control mb-2 mt-2" open style="width: 100%; margin-left: 12.5px">
  <summary>
    {{tree?.name}} <i class="bi" [ngClass]="'bi-gender-' + tree?.sex.toLowerCase()"></i>
    <div class="btn-group float-end">
      <span class="mt-1">{{tree?.dateOfBirth}}</span>
      <a [routerLink]="['/horses/detail', tree?.id]"
         class="btn btn-sm"
         (click)="$event.stopPropagation()">
        <i class="bi bi-info-lg"></i>
      </a>
      <a [routerLink]="['/horses/edit', tree?.id]"
         class="btn btn-sm"
         (click)="$event.stopPropagation()">
        <i class="bi bi-pencil"></i>
      </a>
      <a (click)="deleteHorse(); $event.stopPropagation()"
         class="btn btn-sm">
        <i class="bi bi-trash"></i>
      </a>
    </div>
  </summary>
  <app-node [tree]="tree?.father"></app-node>
  <app-node [tree]="tree?.mother"></app-node>
</details>

原理说明

  • HTML事件默认会向上冒泡到父元素,点击summary内的按钮时,事件会传递到summary,触发details的toggle行为。
  • 调用$event.stopPropagation()可以终止事件向上冒泡,这样按钮的点击只会执行自身的逻辑(路由跳转或删除操作),不会触发details的展开/折叠。
  • 只有点击summary的非按钮区域(包括默认的黑色箭头)时,事件才会正常传递到summary,触发details的状态切换。

内容的提问来源于stack exchange,提问作者aslary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:32:42