【问题标题】:How to show a div at the current caret's position in a textarea? [duplicate]如何在文本区域中当前插入符号的位置显示 div? [复制]
【发布时间】:2013-11-25 23:48:57
【问题描述】:

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

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

代码:

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

我已经掌握了基本机制,但是在插入符号的位置显示/隐藏 是我卡住的地方。

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

【问题讨论】:

  • "get x/y position of cursor in textarea" 带来大量答案...
  • @epascarello 我点击了很多。如果您看到一个对我有帮助的 textarea 而没有其他第三方库,我很乐意阅读它。
  • 您的标签上列出了 2 个第三方库。
  • 您错过了一些参考资料,因此我对问题进行了一些编辑以进行澄清。

标签: javascript jquery knockout.js


【解决方案1】:

这是一个纯粹的 CSS 方法:

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

围绕你的文本区域并在一个容器中列出:

<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 下方生成它,就像我在回答中所做的那样。

【讨论】:

  • 这不是我要求的,尽管我很感谢你的时间。我需要光标位置,而不是固定位置。
【解决方案2】:

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

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

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

【讨论】:

  • Doh,我在想 OP 的意思是鼠标光标。 smh
  • 我认为他/她在文本区域内的打字光标位置之后,而不是鼠标光标。
  • 再一次,不是我要求的。不过感谢您的尝试。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 2022-01-14
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
相关资源
最近更新 更多