【发布时间】:2020-03-29 13:43:53
【问题描述】:
我正在处理 Blazor 文本区域输入。我想要实现的是每当用户输入“@”字符时,我都会弹出一个小窗口,他们可以从中选择一些东西。无论他们选择什么,我都会将该文本插入到 textarea 中,就在他们键入“@”的位置之后。
我得到了这个 HTML:
<textarea rows="10" class="form-control" id="CSTemplate" @bind="original" @oninput="(e => InputHandler(e.Value))" @onkeypress="@(e => KeyWasPressed(e))"></textarea>
代码是:
protected void InputHandler(object value)
{
original = value.ToString();
}
private void KeyWasPressed(KeyboardEventArgs args)
{
if (args.Key == "@")
{
showVariables = true;
}
}
protected void AddVariable(string v)
{
original += v + " ";
showVariables = false;
}
这非常有效。 showVariables 布尔值是我控制弹出窗口的方式,而 AddVariable 函数是我将选定文本添加回文本区域的方式。
但是,有一个小问题。如果我已经输入了某些文本,然后我回到任何以前的位置并输入“@”,菜单仍然会弹出没有问题,但是当用户选择文本并且插入当然只是附加到末尾文本。我在尝试获取“@”时的确切插入符号位置时遇到了麻烦,所以我只在“@”之后附加文本,而不是在输入的末尾。
非常感谢!
【问题讨论】:
标签: asp.net-core blazor