使用Ctrl + V组合键时,是否有办法更新Blazor中附加到输入文本项的绑定变量? [英] Is there a way to update a binding variable attached to an Input text Item in Blazor when using Ctrl +V combination keys?
问题描述
我有这个输入来捕获电话号码. 当用户输入数字并按"Enter" 键时,将触发方法"KeyWasPressed",并且会进行一些验证.这按预期工作,但...
I have this input which is to capture a phone number. When the user enters a number and press the "Enter" Key the Method "KeyWasPressed" is triggered and some validation happens. this works as expected BUT...
例如,当用户从excel复制并粘贴数字时,变量@Phone
不会更新其值,因此当用户按下"Enter" 键时,验证将发送并清空值.
When the user copies and pastes the number from excel, for example, the variable @Phone
doesn't updates its value so when the user presses the "Enter" key the validation sends and empty value.
当某些文本粘贴到输入控件时,是否可以刷新/更新@Phone
变量?
Is there a way to refresh/update @Phone
variable when some text is pasted to the input control?
这是我的代码的一部分:
Here is a snipped of my code:
<input type="number" class="form-control" @bind="@Phone" @onkeypress="@(async e => await KeyWasPressed(e))" placeholder="Client Phone Number" />
@code {
string Phone { get; set; }
private async Task GetClientInfo()
{
if(String.IsNullOrWhiteSpace(Phone))
{
notificationMessages = $"Add a phone number";
}
else
{
showSpinner = true;
clientInfo = await ApiHelper.GetClientInfoByPhone(Phone);
if(clientInfo != null)
{
var singleViewId = clientInfo?.SingleViewId;
var customerNumber = clientInfo?.Accounts?.FirstOrDefault().CustomerNumber;
var status = clientInfo?.Accounts?.FirstOrDefault().Status;
showClientInformation = true;
var CrossSell = clientInfo?.Accounts[0]?.CrossSell;
}
else
{
showClientInformation = false;
notificationMessages = $"No client data for this phone ({Phone})";
}
showSpinner = false;
}
}
private async Task KeyWasPressed(KeyboardEventArgs args)
{
if(args.Key == "Enter")
{
//await GetClientInfo();
}
}
}
推荐答案
直接解决方案:
只需使用@bind-value="@Phone" @bind-value:event="oninput"
:
<input type="number" @bind-value="@Phone" @bind-value:event="oninput"
@onkeyup="@OnUserFinish"/>
<p>@clientInfo</p>
@code {
protected string Phone { get; set; }
protected string clientInfo {get; set;}
private async Task OnUserFinish(KeyboardEventArgs e)
{
if (e.Key == "Enter")
clientInfo = await Fake_ApiHelper_GetClientInfoByPhone(Phone);
}
private async Task<string> Fake_ApiHelper_GetClientInfoByPhone(string phone)
{
await Task.CompletedTask;
return $"Client phone: {phone}";
}
}
奖金轨道:
移至用户友好的防反跳版本:
Bonus track:
Move to a user friendly debounce version:
@using System.Timers;
<input type="number" @bind-value="@Phone" @bind-value:event="oninput"
@onkeyup="@HandleKeyUp"/>
<p>@clientInfo</p>
@code {
protected string Phone { get; set; }
protected string clientInfo {get; set;}
private System.Timers.Timer aTimer;
protected override void OnInitialized()
{
aTimer = new System.Timers.Timer(250);
aTimer.Elapsed += OnUserFinish;
aTimer.AutoReset = false;
}
void HandleKeyUp(KeyboardEventArgs e)
{
// remove previous one
aTimer.Stop();
// new timer
aTimer.Start();
}
private void OnUserFinish(Object source, ElapsedEventArgs e)
{
InvokeAsync( async () =>
{
clientInfo = await Fake_ApiHelper_GetClientInfoByPhone(Phone);
StateHasChanged();
});
}
private async Task<string> Fake_ApiHelper_GetClientInfoByPhone(string phone)
{
await Task.CompletedTask;
return $"Client phone: {phone}";
}
}
这篇关于使用Ctrl + V组合键时,是否有办法更新Blazor中附加到输入文本项的绑定变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!