7

我想在用户输入“@”时开始一个动作(启用自动完成)。我有可用的 jQuery。

通常在 QWERTY 键盘上是这样的:

$('textarea').live('keydown', function(e) {
  if (e.which === 50) {
    console.log('@ has been entered.');
  }
});

但是它不能在 AZERTY 键盘上正常工作。keyCode = 50 对应于é~/2密钥。要在 AZERTY 键盘中键入“@”,它是AltGr+à@/0键。

编辑:自动完成在输入 @ 时开始,并且仅在此之后。例如,当有人输入“Hello @”然后它开始,但是当他输入“Hello @nothing else”时,完整不会做任何事情。示例: http: //mrkipling.github.com/jQuery-at-username/(仅适用于 QWERTY 键盘)。

4

5 回答 5

3

使用keypress而不是keydown. 虽然keydown与每次按下键keypress相关,但与翻译的字符相关,因此例如a可以与按下键a时不同shift,组合字符起作用,死键起作用,以及处理键盘映射中的其他差异。

于 2012-08-26T22:07:04.507 回答
2

如何检查是否@作为字段值中的最后一个字符输入?

$("body").on("keyup", "textarea", function(e) {
    if (this.value.indexOf("@") == this.value.length - 1) {
        console.log("Starting autocomplete");
    }
});​

演示:http: //jsfiddle.net/FKhPW/2/

于 2012-08-26T21:55:19.577 回答
1

使用event.key和现代JS,@直接检查!

没有数字代码了。您可以直接检查密钥。

const input = document.getElementById("textarea");
input.addEventListener("keydown", function (event) {
    if (event.key === "@") {
        // Do something
    }
});

Mozilla 文档

支持的浏览器

于 2018-02-18T19:38:31.513 回答
0

想到的唯一其他选项是检查文本输入内容的计时器。

var patt=new RegExp(/^@/);
var charCheck = setInterval(function(){
  if (patt.test($("#textInput").val())){
    // initiate autocomplete
  }
},100);

此代码将检查元素的内容并查看它是否与字符串开头的符号#textInput的正则表达式匹配。@如果是这样,该test()函数将评估为 true,您可以启动自动完成代码。

于 2012-08-26T21:51:39.763 回答
0

在这里你去工作演示:http: //jsfiddle.net/LxpQQ/

从我在这里的旧回复中:

jquery自动完成使用'@'

希望它适合你,因为:)

代码

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();                    
                });
            }
        },
于 2012-08-26T22:05:15.643 回答