我希望制作一个自动完成功能,当用户输入“@”时,会出现一个自动完成列表来显示名字。
我正在使用jQueryUI的自动完成插件,但我的解决方案(http://jsfiddle.net/aUfrz/22/)唯一的问题是需要将可以自动完成的文本框放置在文本区光标位置上方,而不是当前右侧。
以下是我在JSFiddle中使用的JS代码:
请注意,我这里没有展示一个jQuery插件,该插件用于将所选自动完成建议插入到插入符位置:
我正在使用jQueryUI的自动完成插件,但我的解决方案(http://jsfiddle.net/aUfrz/22/)唯一的问题是需要将可以自动完成的文本框放置在文本区光标位置上方,而不是当前右侧。
以下是我在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>
请注意,我这里没有展示一个jQuery插件,该插件用于将所选自动完成建议插入到插入符位置:
insertAtCaret()
,我在其他SO问题中发现了它。