Blazor中onkeydown与onclick行为不一致问题求助
Blazor输入框按Enter添加内容滞后/为空的问题解决
问题根源在于**@bind默认的绑定触发时机是onchange事件**:当你按下Enter键时,@onkeydown事件会先于输入框的内容同步到绑定变量tag执行,此时tag还是上一次的旧值(首次就是初始空字符串),所以调用addTag()时添加的不是当前输入的内容,导致出现滞后或为空的情况。而点击Add按钮正常,是因为按钮点击时输入框已失去焦点,onchange事件已触发,tag已经同步了最新内容。
解决方案一:修改绑定的触发时机为实时同步
将输入框的绑定事件改为oninput,这样输入框内容会实时同步到tag变量,按下Enter时就能获取到最新值:
<input placeholder="Enter tag" @bind=@tag @bind:event="oninput" @onkeydown="enter"/>
解决方案二:直接获取输入框的当前值
给输入框添加@ref引用,在回车事件中直接读取输入框的实时值,再同步到tag:
<input @ref="tagInput" placeholder="Enter tag" @bind=@tag @onkeydown="enter"/>
对应的@code部分修改:
private ElementReference tagInput; private string tag; private List<string> tags = new List<string>(); // 其他方法不变,修改enter方法 private async Task enter(KeyboardEventArgs e) { if (e.Code == "Enter") { var currentValue = await tagInput.GetValueAsync(); tag = currentValue; addTag(); } }
内容的提问来源于stack exchange,提问作者user1234
相关产品推荐
相关产品推荐

