使用JavaScript检测输入的字符

Detect entered character with JavaScript

本文关键字:字符 输入 检测 JavaScript 使用      更新时间:2023-09-26

我想在用户键入"@"时启动一个操作(启用自动完成)。我有jQuery可用。

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

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

但是,它在AZERTY键盘上无法正常工作。密钥Code=50对应于é~>22密钥。要在AZERTY键盘中键入"@",请使用AltGr+à@/0

编辑:当输入@时,自动完成开始,并且仅在此之后。例如,当有人输入"Hello@"时,它就开始了,但当他输入"Hello@nothingother"时,完整的不会起任何作用。示例:http://mrkipling.github.com/jQuery-at-username/(仅适用于QWERTY键盘)。

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

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

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

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

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

不再有数字代码。你们可以直接检查钥匙。

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

Mozilla文档

支持的浏览器

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

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

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

开始工作演示: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();                    
                });
            }
        },