0

我在数组中有一个关键字列表,当用户正确键入其中一个关键字时,我运行 pass() 函数。我检查用户在输入每个键后输入的内容(在 key up 上)是否等于数组中的任何内容。

我通过在每个键上执行此操作,使用 for 循环遍历数组,如果它与数组中的项目匹配,则运行 pass 函数,但如果它的长度更长或等于长度且不等于一个项目在数组中并且是已经到达数组的末尾然后运行一个失败函数。

这是我的代码:

var keywords = new Array('', 'help', 'search', 'clock', 'folio', 'pong', 'simon');
for(var i=0; i<=(keywords.length)-1; i++){
if($('#code').val()===keywords[i]){
    pass(i);
}
else if(($('#code').val().length>=keywords[i].length) && (i === (keywords.length)-1)){
    fail();
}
}

现在,我遇到的问题是过早的 fail() 执行。当用户键入较长的关键字之一时,在它比较短的关键字之一长时执行失败。

此外,对于键入“帮助”和“搜索”的一些研究,通过和失败运行?

无论如何,我想知道有没有办法改进我的代码,所以我想要做什么并正常工作?

是否可以检查用户输入的内容是否与关键字之一匹配,如果看起来他们正在拼写其中一个关键字,那么不会失败(),但是当他们搞砸并拼写等于长度的东西时,但不是关键字然后失败()。

例如:sear 会在我之前的代码中导致失败,但在我现在尝试做的事情中,直到用户键入类似 searck 的内容才会失败。

4

1 回答 1

2

您只需要fail()for循环完成并且没有匹配项时调用。

我不知道你试图用else if逻辑完成什么。fail()这是一个仅在没有匹配项时调用的版本。出于效率考虑,它还退出循环$('#code').val(),并在找到匹配项时退出循环,因为没有理由继续。forfor

var keywords = new Array('', 'help', 'search', 'clock', 'folio', 'pong', 'simon');
var val = $('#code').val();
var fullMatch = false, partialMatch = false;

for (var i = 0; i < keywords.length; i++) {
    if (val === keywords[i]) {
        fullMatch = true;
        pass(i);
        break;
    } else if (val && !partialMatch) {
        if (keywords[i].indexOf(val) === 0) {
           partialMatch = true;
        }
    } 
}
if (!fullMatch && !partialMatch) {
    fail();
}
于 2013-04-14T17:48:37.123 回答