我正在处理Blazor文本区域输入。我想要实现的是,每当用户键入"@“字符时,我将弹出一个小窗口,他们可以从其中进行选择。无论他们选择什么,我都会将该文本插入到文本区,紧跟在他们键入"@“的位置之后。
我得到了这个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函数是我将所选文本添加回文本区域的方式。
然而,有一个小问题。如果我已经输入了某些文本,然后我返回到之前的任何位置并输入"@",菜单仍然会弹出,没有问题,但当用户选择文本时,插入内容当然只会附加到文本的末尾。我在尝试获取"@“的确切插入符号位置时遇到了问题,因此我只将文本添加到"@”之后,而不是添加到输入的末尾。
非常感谢!
转载请注明出处:http://www.cshftz.com/article/20230503/927164.html