如何在当前插入符号的textarea中显示div?

时间:2013-11-25 23:48:57

标签: javascript jquery knockout.js

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

JSfiddle:http://jsfiddle.net/LR8pe/

代码:

$(".textarea").bind("keypress", function (e) {
    if (String.fromCharCode(e.keyCode) == '@') {
         $(".list").show();
    } else{
         $(".list").hide();
    }
});

我有基本的机制,但在插入符的位置显示/隐藏是我被卡住的地方。

我正在使用jquery / knockout,但纯JS对我很好。

2 个答案:

答案 0 :(得分:-1)

这是纯粹的CSS方法:

http://jsfiddle.net/p774G/2/

围绕你的textarea并列在容器中:

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

修改CSS以使textarea为固定大小,然后将列表放在其底部:

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;
}

编辑:

我不建议在鼠标光标所在的位置生成此框,因为您不知道用户将使用其光标的位置。对于你所知道的一切,它可能不在页面上。这是一种糟糕的用户体验。而是像我在答案中那样在textarea下面产生它。

答案 1 :(得分:-1)

使用你的jsFiddle:http://jsfiddle.net/zCLu9/1/

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

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