0

配列にキーワードのリストがあり、ユーザーがそのうちの 1 つを正しく入力すると、pass() 関数を実行します。各キーが入力された後 (キーアップ時) にユーザーが入力したものが、配列内の何かと等しいかどうかを確認します。

キーを押すたびにこれを行い、forループを使用して配列を反復処理し、配列内のアイテムに一致する場合はパス関数を実行しますが、長さがそれ以上でアイテムと等しくない場合配列内にあり、配列の最後に到達した場合は、fail 関数を実行します。

これが私のコードです:

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() 実行です。ユーザーが長いキーワードの 1 つを入力すると、それが短いキーワードの 1 つよりも長い瞬間に失敗が実行されます。

また、「ヘルプ」と「検索」の入力に関するいくつかの調査では、実行に成功した場合と失敗した場合の両方が実行されますか?

とにかく、コードを改善して適切に機能させる方法があるのではないかと思っています。

ユーザーが入力している内容がキーワードの 1 つと一致しているかどうかを確認することは可能ですか?また、ユーザーがキーワードの 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 に答える