Blazor - 防止兄弟事件触发( onclick > onfocusout )

Posted

技术标签:

【中文标题】Blazor - 防止兄弟事件触发( onclick > onfocusout )【英文标题】:Blazor - Prevent sibling event from firing ( onclick > onfocusout ) 【发布时间】:2022-01-01 07:33:43 【问题描述】:

我正在 Blazor 中创建自己的自动完成输入。 (如下所示)

function FocusOut()

  document.getElementById("list-item-one").innerhtml = "Focus out";


function Click()

  document.getElementById("list-item-one").innerHTML = "Click";
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="search" onfocusout="FocusOut()" />
<ul class="dropdown">
  <li id="list-item-one" onclick="Click()">List Item One</li>
</ul>

当我单击列表项时,会触发 onfocusout 事件而不是 onclick 事件。有没有办法“推送” onclick 事件?

这不是父子关系,因此“stopPropagation”无效。我也知道有一个datalist 标签,但我没有使用它,因为它在不同浏览器中的外观、感觉和行为方式。

【问题讨论】:

您可以将功能实现添加到问题中吗?如果你去掉Clear()函数并用一些空的void函数替换它,它工作吗? 不,它没有,它只是一个将 bool "showDropdown" 设置为 false 的 void。 用代码更新您的问题或创建一个小提琴,以便我们测试解决方案。 乍一看,问题在于onclickonfocusout 事件之后执行,此时下拉菜单关闭。尝试将onclick 替换为onmousedown,但根据您想要执行的操作,您可能不希望关闭下拉菜单... 我已经使用有效的 javascript 更新了我的代码。那里的事件一个接一个地执行。但话虽如此,onmousedown 而不是 onclick 就像一个魅力。谢谢! 【参考方案1】:

问题是事件的顺序是OnMouseDownOnFocusOutOnClick

因此,您的下拉菜单在 OnClick 事件之前关闭,因此未注册点击。

一个可行的解决方案是将OnClick 替换为OnMouseDown

基于@DuncanLuk 的this 回答。

【讨论】:

以上是关于Blazor - 防止兄弟事件触发( onclick > onfocusout )的主要内容,如果未能解决你的问题,请参考以下文章

Blazor 3.1 嵌套的鼠标悬停事件

有没有办法通过单击触发 Blazor 中的两个连续事件?

vueJS3 - 如何触发来自兄弟组件的事件的函数

Blazor 事件处理开发指南

onclic事件传值发生变化的问题

初始化 Blazor 组件时初始加载数据;页面更新时不要再次触发该查询