2013-04-14 43 views
0

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

我这样做是通过在每个键上使用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(); 
} 
} 

现在,我遇到的是过早失效()执行的问题。当用户键入其中一个较长的关键字时,就会执行比其中一个较短的关键字更长的时间。

此外,对于一些关于打字'帮助'和'搜索'的研究都通过和失败运行?

无论如何,我想知道的是有没有一种方法来改善我的代码,以便更好地实现我想要做的和正确工作?

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

例如:在我以前的代码中会导致失败,但是我现在正在尝试执行的操作不会直到用户键入诸如searck之类的东西。

+0

为什么不使用['$ .inArray()'](http://api.jquery.com/jQuery.inArray/)? – Mottie

回答

2

for循环完成并且没有匹配时,您只需要拨打fail()即可。

我不能告诉你想用else if逻辑完成什么。只有在没有匹配的情况下,这个版本才会拨打fail()。它也需要出于for循环出于效率考虑,并且在找到匹配时由于没有理由继续而跳出for循环。

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(); 
} 
+0

哦,这是正好在for循环的右括号之后。 等待,但即使执行pass(),也不会失败()运行吗? – IMUXIxD

+0

@IMUXIxD - 你必须添加一些逻辑来使其工作。您可以在找到匹配项时设置一个布尔值,并在'for'循环之后检查布尔值以查看是否有任何匹配。 – jfriend00

+0

这就是我的想法。设置为true的布尔值是执行pass,然后如果该值为false,则运行fail()。 – IMUXIxD

相关问题