0

e.whichイベント機能に厄介な問題があります。on keyup の簡単なコードを書き、どのキーが押されたかを確認するたびに、基本的にやりたいことが間違っています。

http://jsbin.com/axosuz/1/edit

他の何よりも前にバックスペースを押すと、単語のリストが追加されます。上下左右と複数のシフトについても同じことが言えます。それはかなり面倒で、修正を考えようとしています。

$('textarea').keyup(function (e) {
    var list = ['key', 'keep', 'king', 'kept'];
    if(e.which !== 32){
    for (var i = 0; i < list.length; i++) {
        if (list[i].toLowerCase().indexOf($(this).val()) === 0) {
            $('#div').append('<span class="autosuggest">' + list[i] + '&nbsp;</span>');
        } else if (list[i].toLowerCase().indexOf($(this).val()) === -1) {
            $('#div').html('');
        }
    }
   }
});
4

1 に答える 1

1

入力がないときに問題が発生する場合は、入力があるかどうかを確認してください。

デモ

(申し訳ありませんが、jsbin では動作しません)

まず、値アクセスをスコープの先頭に移動します。

var value = $(this).val();

次に、値に文字が含まれているかどうかを確認します。それ以外の場合は、ループを実行する必要さえありません。

if (!value.length) return;

完成したコード:

$('textarea').keyup(function () {
    var list = ['key', 'keep', 'king', 'kept'],
        value = $(this).val();

    if (!value.length) return;

    for (var i = 0; i < list.length; i++) {
        if (list[i].toLowerCase().indexOf(value) === 0) {
            $('#div').append('<span class="autosuggest">' + list[i] + '&nbsp;</span>');
        } else if (list[i].toLowerCase().indexOf(value) === -1) {
            $('#div').html('');
        }
    }
});
于 2013-08-05T03:30:50.723 に答える