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異なる場合があり、合成文字は機能し、デッドキーは機能し、その他のキーボードマッピングの違いは処理されます。ashift

于 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 Docs

サポートされているブラウザ

于 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 に答える