首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Blazor -阻止同级事件触发( onclick > onfocusout )

基础概念

Blazor 是一个用于构建交互式 Web UI 的框架,使用 C# 代替 JavaScript 来编写客户端代码。它允许开发者使用 .NET 平台来创建丰富的 Web 应用程序。

相关优势

  1. 性能:由于 Blazor 使用 WebAssembly(Wasm)运行 .NET 代码,因此性能接近原生 JavaScript。
  2. 开发效率:开发者可以使用熟悉的 C# 和 .NET 生态系统,减少开发时间。
  3. 维护性:统一的代码库使得前后端逻辑更容易维护。
  4. 安全性:.NET 平台提供了强大的类型检查和内存安全特性。

类型

Blazor 主要有两种模式:

  1. Blazor Server:服务器端渲染,UI 状态和事件处理在服务器上进行。
  2. Blazor WebAssembly:客户端渲染,整个应用程序在浏览器中运行。

应用场景

Blazor 适用于需要高性能、复杂交互和统一开发体验的 Web 应用程序,如企业级应用、在线工具和游戏。

问题:阻止同级事件触发(onclick > onfocusout)

在 Blazor 中,如果你希望在点击一个元素时阻止其同级元素的 onfocusout 事件触发,可以通过以下方法实现:

原因

onfocusout 事件在元素失去焦点时触发,而 onclick 事件在元素被点击时触发。如果这两个事件绑定在同级元素上,点击一个元素可能会导致另一个元素的 onfocusout 事件触发。

解决方法

你可以使用 JavaScript 的 event.stopPropagation() 方法来阻止事件冒泡,从而防止 onfocusout 事件被触发。

以下是一个示例代码:

代码语言:txt
复制
@page "/event-stop-propagation"

<h3>Event Stop Propagation Example</h3>

<input type="text" @bind="inputValue" @onfocusout="HandleFocusOut" />
<button @onclick="HandleClick">Click Me</button>

@code {
    private string inputValue = "";

    private void HandleFocusOut(BlurEventArgs e)
    {
        Console.WriteLine("Focus Out Event Triggered");
    }

    private void HandleClick()
    {
        Console.WriteLine("Click Event Triggered");
        // 阻止事件冒泡
        JSRuntime.InvokeVoidAsync("stopPropagation");
    }
}

wwwroot/index.htmlwwwroot/_Host.cshtml 中添加以下 JavaScript 代码:

代码语言:txt
复制
<script>
    function stopPropagation() {
        event.stopPropagation();
    }
</script>

参考链接

通过这种方式,你可以在点击按钮时阻止 onfocusout 事件的触发,从而实现所需的行为。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Asp.net Razor组件的事件与HTML事件对比

    在 ASP.NET Razor 中,我们可以创建自定义的组件(通常称为“Razor 组件”或“Blazor 组件”),并为这些组件定义事件。...ASP.NET Razor 组件中的事件在 ASP.NET Razor 中(特别是在 Blazor 框架中),我们可以为组件定义事件,这样组件的使用者就可以订阅这些事件并在事件发生时执行特定的代码。...; }}在这个例子中,当按钮被点击时,OnClickCallback 方法会被调用,它会触发 OnClick 事件。...使用场景:ASP.NET Razor 组件事件:当需要创建可重用的 UI 组件,并希望这些组件能够触发服务器端事件时,应使用 Razor 组件事件。...例如,在 Blazor 应用程序中创建自定义的表单控件、数据展示组件等。HTML 事件:当需要在浏览器端直接响应用户交互,如显示提示信息、更新页面元素等简单操作时,可以使用 HTML 事件。

    19710

    利用AdvancedTimer定时刷新页面

    组件 高级计时器:包装到 Blazor 组件中的计时器对象,用于对已用事件执行异步操作。 AdvancedTimer元件 此组件不呈现任何 HTML 元素。它被包装到一个组件中,以便于使用。...发生次数:时间 { get; set; } (默认值:Times.Once()) 触发的次数Times。...功能 过时(将 IsEnabled 设置为 true):Start(): void Start() 启动内部计时器,该计时器将在给定发生时间的设置延迟和触发事件后启动。...已过时(将 IsEnabled 设置为 false):Stop():void Stop() 停止内部计时器,不再触发任何事件。...将在给定的发生时间内触发事件。 Dispose():实现 IDisposable 接口 组件实现IDisposable接口 Blazor 框架将在从渲染树中删除父级时调用它。

    1.3K10

    C# 一分钟浅谈:Blazor Server 端开发

    在 Blazor Server 模式下,应用程序的 UI 渲染和事件处理都在服务器端完成,通过 SignalR 实现与客户端的实时通信。基本架构客户端:浏览器通过 SignalR 连接到服务器。...服务器:处理 UI 渲染和事件处理,并通过 SignalR 将更新推送到客户端。快速入门创建 Blazor Server 应用打开 Visual Studio,选择“创建新项目”。...状态管理问题:在 Blazor Server 应用中,状态管理是一个常见的挑战,尤其是在多用户环境中。解决方案:使用 StateHasChanged 方法手动触发 UI 更新。...解决方案:使用事件回调(EventCallback)来传递事件。利用服务(Service)来管理全局状态。onclick="IncrementCount">Click me</button

    19500

    Blazor-StateHasChanged

    在Razor组件的呈现中,大部分的方法是不需要 通常情况下,Blazor会在状态变化时自动触发重新渲染,因此只有在需要显式控制重新渲染时(如异步操作或外部事件处理)才需要使用 StateHasChanged...(2) 在 Blazor 不受管理的外部调用事件处理程序。...ComponentBase 只在第一次返回 Task,在 Task 已完成的情况下会触发重新呈现,若还有其它 await 等待,则必须手动调用 StateHasChanged()方法才能呈现。...外部调用 ComponentBase 只能管理自己生命周期内的方法(如 OnInitialized()或 OnParametersSetAsync())和 Blazor 触发的事件(如@onclick、...timer 计时器上挂载的事件处理程序是 OnTimerCallback(),该事件处理程序是由计时器调用的,并不是由 ComponentBase 管理的,所以不会自动呈现 ,OnTimerCallback

    6500

    Blazor学习之旅(5)数据绑定

    对于上面的例子来说,当在文本框中输入了数据时,只有当离开文本框或选择按下Enter键或者Tab键,才会触发DOM onchange事件让h1标签的内容发生改变。...假设,我们希望在文本框中输入任何内容时,都会触发h1标签内容的更改。...这个事件就不再是DOM onchange事件了而是DOM oninput事件,因此,我们可以借助 @bind-value 和 @bind-value:event 指令来绑定到oninput事件: @page...同时,我们也注意到在Blazor中事件回调(委托)的统一类型为:EventCallback。我们在子组件中使用的是InvokeAsync()方法也说明它是线程安全的。...(2)事件通知是自底向上流动,即子组件的ChangeValue方法都会调用EventCallback来向上通知。 最终效果: 小结 本篇,我们了解了数据如何在Blazor中进行数据的绑定。

    53920

    jquery 事件冒泡、阻止事件冒泡 - event.stopPropagation()

    什么是事件冒泡 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播...事件冒泡的作用 事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。...事件冒泡机制有时候是不需要的,需要阻止掉,通过 event.stopPropagation() 来阻止 阻止上面点击黄色div的click()冒泡传递 ?...设置了阻止冒泡传递之后,那么click()事件就不会传递到father和grandfather的事件,所以只有一个alert()弹出。 完整事件冒泡示例代码 <!...: return false; 好,下面将阻止事件冒泡的方法写成return false;来看看。

    6.1K41

    Blazor练习2

    个人练手笔记,对照官网练习.想学Blazor可以先看官网. 什么是 Razor 组件? Razor 文件定义了构成部分应用 UI 的组件。...类包括常见 UI 元素,如状态、呈现逻辑、生命周期方法和事件处理程序。 尝试使用计数器 在正在运行的应用中,单击左侧边栏中的“计数器”选项卡导航到计数器页面。随后应会显示以下页面。...递增网页中的计数器值通常需要编写 JavaScript,但借助 Blazor,可使用 C#。 可在 Pages/Counter.razor 处找到 Counter 组件的实现。..."/counter" Counter Current count: @currentCount onclick...每次选择“单击我”按钮时会出现以下情况: 触发点击事件。 调用 IncrementCount 方法。 currentCount 递增。 呈现组件来显示更新后的计数。

    1.8K11

    【炫丽】从0开始做一个WPF+Blazor对话小程序

    内容如下,引入了一个命名空间Microsoft.AspNetCore.Components.Web,这是Razor常用命名空间,包含用于向 Blazor 框架提供有关浏览器事件的信息的类型。...WPF默认窗体的边框,运行程序如下:看上图,点击窗体中的按钮(其实是Razor组件的按钮),但未执行按钮点击事件,且窗体消失了,这是怎么回事?...再尝试把Tab移到标题栏,前面有提过的效果:上面的效果,代码修改如下,删除了原标题栏代码,将窗体操作按钮放到了MToolbar里面,并使用MToolbar添加了双击事件、鼠标按下、释放事件实现窗体拖动:...多窗体消息通知一般C/S窗体之间通信使用委托、事件,而在WPF开发中,可以使用一些框架提供的抽象事件订阅\发布组件,比如Prism的事件聚集器IEventAggregator,或MvvmLight的Messager...private int tagCount = 6; protected override void OnInitialized() { // 订阅业务消息,在主窗口点击桃心按钮时触发

    8.2K60

    ASP.NET Core Blazor Webassembly 之 数据绑定

    上一次我们学习了Blazor组件相关的知识(Asp.net Core Blazor Webassembly - 组件)。这次继续学习Blazor的数据绑定相关的知识。当代前端框架都离不开数据绑定技术。...使用@进行绑定 @page "/counter" Current count: @currentCount onclick...要知道VUE的双向绑定可是实时同步的,那么Blazor如何做到在输入的同时就更新值呢,答案是使用@bind:event来指定回写的激发事件,我们改成“oninput”事件就可以实现: userName...到这里我已经无语了,最后我只能在子组件直接添加一个按钮,修改完后点击保存来触发InvokeChanged事件,这样子是可以的: ====================child============...WebAssembly ASP.NET Core Blazor 初探之 Blazor Server

    4.9K30

    【炫丽】从0开始做一个WPF+Blazor对话小程序

    内容如下,引入了一个命名空间Microsoft.AspNetCore.Components.Web,这是Razor常用命名空间,包含用于向 Blazor 框架提供有关浏览器事件的信息的类型。...释放事件实现窗体拖动: <!...多窗体消息通知 一般C/S窗体之间通信使用委托、事件,而在WPF开发中,可以使用一些框架提供的抽象事件订阅\发布组件,比如Prism的事件聚集器IEventAggregator,或MvvmLight的Messager...上面是一些套话,站长根据Prism的事件聚集器和MvvmLight的Messager源码阅读,简单封装了一个Messager,可以适用于一般的业务需求。...private int tagCount = 6; protected override void OnInitialized() { // 订阅业务消息,在主窗口点击桃心按钮时触发

    10.4K20
    领券