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

Blazor数字输入组件:如何无需JS阻止鼠标滚轮修改值?

Blazor数字输入组件禁用鼠标滚轮的无JS解决方案

你当前的代码里,虽然跳过了StepUp/StepDown方法,但浏览器原生的number输入框会自行响应滚轮事件执行数值增减的默认行为,所以光设置args.DeltaY = 0根本拦不住。无需JavaScript的解决办法很简单:利用Blazor事件参数的PreventDefault()方法直接阻止浏览器的默认操作。

修改后的完整代码

Razor部分

<input type="number"
       step="1"
       disabled="@Disabled"
       readonly="@Readonly"
       @onmousewheel="@OnMouseWheel"
       @onwheel="@OnMouseWheel"
       @bind-value="@_value" />

C#事件处理逻辑

protected async Task OnMouseWheel(WheelEventArgs args)
{
    // 禁用滚轮、组件禁用或只读时,直接阻止浏览器默认行为
    if (DisableMouseWheel || Disabled || Readonly)
    {
        args.PreventDefault();
        return;
    }

    // 按住Shift键也不响应滚轮操作
    if (args.ShiftKey)
    {
        return;
    }

    // 正常处理滚轮触发的数值增减
    if (args.DeltaY > 0)
    {
        await StepUp();
    }
    else
    {
        await StepDown();
    }
}

关键说明

  • args.PreventDefault()是Blazor内置的事件方法,专门用来取消浏览器的默认行为,这里就是直接拦截number输入框因滚轮改变数值的原生逻辑。
  • 调整了判断顺序,优先处理需要拦截的场景,避免不必要的代码执行。
  • 如果你的StepUp/StepDown是同步方法,把方法改成protected void OnMouseWheel(...),去掉async和await即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:55:42