2016-09-11 8 views
0

誰かがこの問題を解決するのに役立つか、私に正しい方向に向けるのに役立つかどうか疑問に思っていました。onkeydown、オートコンプリート

私のプロジェクトでは、私たちはオートフィルする必要があります。現時点では、一度フォーカスを離れると驚くように動作するonblurを使用します。しかし、最近の変更のために、マップに入力に一致するユニークな項目が1つしかない場合にのみ、変更を行う必要があります。

私は次のように定義大きな配列があります。

var myArray = [ 
[content, content], 
[content, content], 
... 
] 

後の私のコードで私はマップと関連付けは、少なくともこれは以下のように、私が見て最もstackoverflowの質問がそれに言及するものである。

for (var key in map) { 
     if (map.hasOwnProperty(key)) { 
      if (map[key].toLowerCase().indexOf(location.toLowerCase()) >= 0) 

次のように

var myMap = {}; 

for(0 to myArray.length) { 
    var a = myArray[i][0]; 
    var b = myArray[i][1]; 

    myMap[a] = b; 

} 

は今、最終的に私は、この配列の反復処理します上記のコード行は、変更方法を理解するのに苦労しています。現時点では、ぼかしを使用しているときに、たとえば「A」という文字を入力してフォーカスエリアを離れると、自動的に特定の名前で入力されます。しかし、配列には、Aから始まったり、Aを含んだ多くのオブジェクトがありますが、onkeydownイベントが最終的にそれを可能なキーと値のペアにまでフィルタリングするまで続けるように、どのように変更できますか?私はフィルタリングのMDNのドキュメントを見てみましたが、私の目的のためにはうまくいかないと思っています。少なくとも、私はJSにはあまりにも慣れていません。

答えて

0

最初と最後のインデックスが非負であり、等しい場合は、1つだけです。 & &とブール値の短絡評価でこれを行うことができますが、これは画面のすぐ近くで実行されるため、(ブロックの最後を追加するまで)もう1つネストしてコードを表示します。しかし、複数のキーに一致するものがあるかどうかを確認する必要もあります。

var matchCount=0; 
for (var key in map) { 
    if (map.hasOwnProperty(key)) { 
     if (map[key].toLowerCase().indexOf(location.toLowerCase()) >= 0){ 
if (map[key].toLowerCase().indexOf(location.toLowerCase()) == map[key].toLowerCase().lastIndexOf(location.toLowerCase())) { 
matchCount++; 

その後、外あなたのforループ:

if (matchCount==1){ //do your stuff 
+0

クイック編集、あなたは非負のはその部分を追加したものを前のif文に含まれるべきであると言うとき? – SomeStudent

+0

いいえ、すでに> = 0でチェックしています。両者が等しい場合は、両方とも> = 0 –

+0

だと思います。説明をありがとう。 – SomeStudent