【发布时间】:2012-10-10 07:50:00
【问题描述】:
我想做一个自动完成功能,如果有人键入“@”,他们会得到一个自动完成的姓名列表。
我正在使用 jQueryUI 自动完成功能,我的解决方案 (http://jsfiddle.net/aUfrz/22/) 的唯一问题是可自动完成的文本输入需要放置在 textarea 光标位置的顶部,而不是当前位置的右侧。
这是我在 JSFiddle 中的 JS:
$(document.body).on('keypress', 'textarea', function(e) {
var names = [
"johnny",
"susie",
"bobby",
"seth"
],
$this=$(this),
char = String.fromCharCode(e.which);
if(char == '@') {
console.log('@ sign pressed');
var input=$('<input style="position:relative; top:0px; left:0px;background:none;border:1px solid red" id="atSign" >');
$this.parent().append(input);
input.focus();
input.autocomplete({
source: names,
select: function (event, ui) {
console.log('value selected'+ui.item.value);
//$this.val('@'+ui.item.value);
$this.insertAtCaret(ui.item.value);
$this.focus();
input.remove();
} //select
}); //autocomplete
} //if
}); // keypress
HTML:
<textarea></textarea>
请注意,我在此处NOT显示了一个 jQuery 插件,用于在插入符号位置插入选定的自动完成建议:insertAtCaret(),我在此 other SO question 找到了它。
【问题讨论】:
-
您的意思是要获取插入符号的像素坐标,然后将输入定位在那里?我不确定是否可以获得插入符号的像素坐标。
-
这似乎是一种解决方案,为什么我们不能得到这些坐标?
-
因为通常不需要此信息,因此无法通过 DOM 访问。您可以尝试将每个字符的像素宽度乘以插入符号的字符偏移量,以获得文本区域内插入符号的像素偏移量。
-
@Asad 谢谢你,你能在回答中提供这个建议吗?
-
我正在努力在小提琴中实现这一点,并将很快发布答案。如果有人击败我,欢迎他们发布。
标签: javascript jquery html css jquery-ui