我想在用户输入'@'时启动操作(启用自动完成功能)。我有jQuery可用。
通常在QWERTY键盘上,它是这样的:
$('textarea').live('keydown', function(e) {
if (e.which === 50) {
console.log('@ has been entered.');
}
});
然而,它在AZERTY键盘上无法正常工作。 keyCode = 50对应于é 〜 / 2 键。要在AZERTY键盘中输入“@”,它是 AltGr + à @ / 0 key。
编辑:在输入@时开始自动完成,并且仅在此之后开始。例如,当有人输入“Hello @”然后它会启动,但是当他输入“Hello @nothing else”时,完整版将不会执行任何操作。示例:http://mrkipling.github.com/jQuery-at-username/(仅适用于QWERTY键盘)。
答案 0 :(得分:3)
使用keypress
代替keydown
。虽然keydown
与每次按键有关,但keypress
与已翻译的字符相关,因此例如a
可能与a
不同而 shift 按键,组合字符工作,死键工作,以及键盘映射的其他差异被处理。
答案 1 :(得分:2)
检查是否输入@
作为字段值中的最后一个字符?
$("body").on("keyup", "textarea", function(e) {
if (this.value.indexOf("@") == this.value.length - 1) {
console.log("Starting autocomplete");
}
});
答案 2 :(得分:0)
唯一想到的另一个选项是检查文本输入内容的计时器。
var patt=new RegExp(/^@/);
var charCheck = setInterval(function(){
if (patt.test($("#textInput").val())){
// initiate autocomplete
}
},100);
此代码将检查#textInput
元素的内容,并查看它是否与字符串开头的@
符号的正则表达式匹配。如果是,则test()
功能将评估为true,您可以启动自动填充代码。
答案 3 :(得分:0)
在这里你去工作演示: http://jsfiddle.net/LxpQQ/
从我以前的回复:
希望它适合你:)
<强>码强>
source: function(request, response) {
if (request.term.indexOf("@") >= 0) {
$("#loading").show();
getTags(extractLast(request.term), function(data) {
response($.map(data.tags, function(el) {
return {
value: el.name,
count: el.count
}
}));
$("#loading").hide();
});
}
},
答案 4 :(得分:0)
event.key
和现代JS,直接检查@
!没有数字代码了。你可以直接检查密钥。
const input = document.getElementById("textarea");
input.addEventListener("keydown", function (event) {
if (event.key === "@") {
// Do something
}
});