2016-09-11 2 views
0

Мне было интересно, может ли кто-нибудь помочь мне решить эту проблему или указать мне в правильном направлении.onkeydown и auto complete

В моем проекте у нас есть подача, которую нужно авторизовать, в этот момент я использую onblur, который творит чудеса, поскольку это только делает это, когда вы покидаете фокус. Однако из-за недавних изменений это нужно сделать только тогда, когда на карте есть только один уникальный элемент, который соответствует входу.

У меня есть большой массив, определенный следующим образом:

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

Позже в моем коде я связать его с картой, по крайней мере, это то, что большинство StackOverflow вопросы, которые я смотрел на переданные ему следующим образом:

var myMap = {}; 

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

    myMap[a] = b; 

} 

Теперь, наконец, я перебирать этот массив следующим образом:

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

в выше - строка кода, с которой я изо всех сил пытаюсь понять, как измениться. В этот момент, используя размытие, если я набираю букву «А», например, и оставляю область фокусировки, она автоматически заполняет ее определенным именем. Однако в массиве есть много других объектов, которые начинаются с или содержат A. Как я могу изменить его, чтобы событие onkeydown продолжало идти, пока оно, наконец, не отфильтрует его до только возможной пары ключ-значение? Я пытался посмотреть документацию MDN для фильтрации, но я не думаю, что это сработает для моих целей, или, по крайней мере, я слишком неопытен с JS.

ответ

0

Если indexOf первый и последний являются неотрицательными и равными, существует только один. Вы можете сделать это с помощью & & и булевой оценки короткого замыкания, но это будет работать очень далеко от экрана, поэтому я покажу код с еще одним вложенным, если (до вас, чтобы добавить конец блока). Но нам также нужно выяснить, есть ли совпадения на нескольких ключах.

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++; 

затем вне вашего для цикла:

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

быстрого редактирования, когда вы говорите, неотрицательное следует, что часть будет включена в заявление, если предшествующий один добавленный? – SomeStudent

+0

нет, вы уже проверили его с помощью> = 0. Если они равны, то они равны 0 = 0 –

+0

. Спасибо за уточнение. – SomeStudent