Javascript 如何在文本区域的当前插入符号位置显示div?

Javascript 如何在文本区域的当前插入符号位置显示div?,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我见过一些这样的问题,但找不到解决办法。我有一个文本框。当用户输入时,如果他们按@,我想在插入符号的位置显示他们可以从中选择的项目列表,即文本框中下一个键入的字符将出现的位置,而不是鼠标光标的位置 JSfiddle: 代码: $(".textarea").bind("keypress", function (e) { if (String.fromCharCode(e.keyCode) == '@') { $(".list").show(); } else{

我见过一些这样的问题,但找不到解决办法。我有一个文本框。当用户输入时,如果他们按@,我想在插入符号的位置显示他们可以从中选择的项目列表,即文本框中下一个键入的字符将出现的位置,而不是鼠标光标的位置

JSfiddle:

代码:

$(".textarea").bind("keypress", function (e) {
    if (String.fromCharCode(e.keyCode) == '@') {
         $(".list").show();
    } else{
         $(".list").hide();
    }
});
我有基本的技巧,但在插入符号的位置显示/隐藏是我被卡住的地方


我正在使用jquery/knockout,但是纯JS对我来说没问题

这里是一种纯粹的CSS方法:

将文本区域和列表围在一个容器中:

<div class="spacer"></div>
<div class="list-container">
    <textarea class="textarea"></textarea>
    <ul class="list">
        <li>item</li>
    </ul>
</div>
编辑:

我不建议在鼠标光标所在的位置生成此框,因为您不知道用户的光标将位于何处。据你所知,它可能已经不在页面上了。这是一种糟糕的用户体验。而是像我在回答中所做的那样,在文本区域下方生成它。

使用JSFIDLE:

基本上,我创建了两个全局变量,负责保存鼠标的X和Y坐标,这些坐标在mousemove上更新,因此它们总是很好,几乎总是准确的。然后,这些坐标用于设置.list元素在任何时候显示时的偏移量


我还将元素在CSS中的位置设置为绝对。

查看这篇文章,在文本区域中获取光标的x/y位置会带来大量答案…@epascarello我点击了很多次。如果你看到一个可以帮助我使用文本区域而没有其他第三方LIB的库,我很乐意阅读。你的标签上列出了两个第三方库。你错过了一些参考资料,所以我编辑了一点问题以澄清。哦,我想OP是指鼠标光标。我想他/她是在寻找文本区域中键入光标的位置,而不是鼠标光标。再一次,不是我要求的。谢谢你的努力。这不是我想要的,不过我很感谢你抽出时间。我需要光标的位置,而不是固定的位置。
textarea
{
    width: 300px;
    height: 70px;
    padding: 3px;
}

.list {
    list-style: none;
    background-color: gray;
    display: none;

    position: absolute;
    top: 76px;
    left: 0;

    margin: 0;
    padding: 0;
    border: 0;
}

.list-container
{
    position: relative;
}

.list li
{
    padding: 5px;
    width: 294px;
}