【发布时间】:2021-12-07 01:08:27
【问题描述】:
我创建了一个仅接受 15 和 27 的倍数的输入。代码有效,但单击向上/向下箭头会在逻辑将其更改为接受值之前显示不接受的值一毫秒。 示例:当前值为 15。点击向上箭头后,输入首先显示 16,然后将其更改为 27。 我怎样才能避免这种情况?
这是我的代码:
Index.razor
<input type="number" @bind-value="@Foo">
Index.razor.cs
public partial class Index
{
private int _foo = 500;
private int Foo
{
get => _foo;
set
{
if (value != _foo)
{
if (value > _foo)
{
_foo = value;
while (_foo % 15 != 0 && _foo % 27 != 0)
{
_foo++;
}
}
else
{
_foo = value;
while (_foo % 15 != 0 && _foo % 27 != 0)
{
_foo--;
}
}
}
}
}
}
非常感谢!
【问题讨论】:
-
添加一些额外的html属性怎么样,比如:
step="12" min="15" max="27"? -
但 min="15" 和 max="5000"。所以,从 15 到 27 你是对的,step="12"。但是从 27 到下一个可能性,也就是 30,step="3"。当然,我也可以改变步长,但是当用户增加值时步长只有 3。如果用户决定减小该值,则再次为 12(因为不允许 27-3=24)。
-
我的错误,误读了您的问题并认为您只是使用这两个值。 step 属性是固定的,因此不允许进行数学运算,但是您可以使用 js 对其进行更新,但这忽略了 .NET/Blazor 能够在没有 js 的情况下进行编码的事实;)好吧,我想您仅限于然后只有几个选项,比如用 JS 代码替换你的逻辑,它可能会更快一些并且不会显示闪烁。也可能有一个选项可以用您的值预填充下拉列表或仅在提交时验证它,当然会提示您对该输入字段的逻辑。
-
我还可以使用 C# 更新步骤并使用
step="@stepValue"。但如前所述,这是不可能的,因为“升压”和“降压”大多不一样,我不知道用户是增加还是减少值。我不太了解JS,所以,这对我来说也不是一个选择。