如何防止 blazor 服务器端的事件冒泡?

How to prevent event bubbling in blazor server side?

在我的 Blazor 服务器端应用程序中,我有代表数据集的卡片,用户可以管理这些卡片。 它们看起来像这样:

相关代码如下所示:

<div class="card h-100 text-dark" @onclick="() => OnDatasetSelected(dataset)">
    <!-- header image -->
    <div class="card-body position-relative">
        <div class="dropdown dropstart">
            <button  type="button" data-bs-toggle="dropdown" aria-expanded="false">
                <i class="bi bi-three-dots-vertical"></i>
            </button>
            <ul class="dropdown-menu">
                <!-- menu content --> 
        </div>
        <!-- card content -->
</div>

从代码中可以看出,我目前正在使用 bootstraps dropdown (dropleft in my case) component 中的模板代码添加上下文菜单(三个垂直点)。 这工作正常 - 或者更确切地说,如果它不是卡片上的 @onclick 事件,它会调用代码到 select 数据集并导航到另一个页面。

问题基本上是:如果单击内部元素,我怎样才能阻止 OnClick 事件。我想,我想问的是:如何防止 HTML 中的事件冒泡?是否可以不向内部下拉元素添加代码(bootstrap-下拉列表的显示是使用 popper.js 完成的,这是外部的)

大声笑,发帖 5 分钟后找到答案 here

简单地使用onclick="event.stopPropagation();"来防止事件冒泡。

所以最后我只是将其添加到下拉容器中:

   <div class="dropdown dropstart position-absolute top-0 end-0 " onclick="event.stopPropagation();">
        <button  type="button" class=" btn btn-outline-secondary fs-5 p-0 m-2 border-0"
                data-bs-toggle="dropdown" aria-expanded="false">
            <i class="bi bi-three-dots-vertical"></i>
        </button>
        <ul class="dropdown-menu">
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
        </ul>
    </div>

现在我可以点击菜单按钮了:

重要编辑: 如果您遇到 onclick="event.stopPropagation();" 阻止触发内部按钮的 @onclick 事件的问题,可以直接在内部按钮上使用以下内容:

<button type="button" @onclick="MyFunction" 
    @onclick:stopPropagation="true">
    Button Text
</button>

这将在单击按钮时调用 MyFunction,但会阻止事件传播到父元素。