空格键的键控功能事件和退格键的反转

时间:2013-08-05 03:10:29

标签: javascript jquery events indexof keyup

e.which事件函数存在一些恼人的问题。每当我写一个关于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('');
        }
    }
   }
});

1 个答案:

答案 0 :(得分:1)

如果没有输入时出现问题,请检查是否有输入。

demo

(抱歉,我无法使用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('');
        }
    }
});