我见过这样的一些问题,但无法找到解决方案。我有一个文本框。当用户输入时,如果他们按@
,我想显示他们可以从该插入符号位置选择的项目列表(即文本框中将出现下一个字符的位置, 不鼠标光标的位置)。
JSfiddle:http://jsfiddle.net/LR8pe/
代码:
$(".textarea").bind("keypress", function (e) {
if (String.fromCharCode(e.keyCode) == '@') {
$(".list").show();
} else{
$(".list").hide();
}
});
我有基本的机制,但在插入符的位置显示/隐藏是我被卡住的地方。
我正在使用jquery / knockout,但纯JS对我很好。
答案 0 :(得分:-1)
这是纯粹的CSS方法:
围绕你的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中将元素的位置设置为绝对值。