Проблема автозаполнения с двумя идентичными «значениями»

#javascript #jquery #arrays #hash #autocomplete

#javascript #jquery #массивы #хэш #автозаполнение

Вопрос:

Я использую плагин автозаполнения jQuery, собычными данными, хранящимися в массиве:

 data = [city1, city2, city3, city1]
  

Как только пользователь выбирает элемент данных, например city 1 , я сохраняю его в user_input . Я использую пользовательский ввод для чтения хэша, который содержит город, почтовый индекс штата и название. Скрипт отображает каждый элемент хэша на экране, когда пользователь нажимает enter. Это также отлично работает:

   $(document).keypress(function(e) {
      if(e.keyCode == 13) {
          var user_input =  $("input#example").val()

            $.each(personinfo,function(key,value){
                if(value['city']== user_input){
                    $('#city').empty().append(value['city']);
                    $('#state').empty().append(value['state']);
                    $('#zip').empty().append(value['zip']);
                    $('#name').empty().append(value['name']);
                }
})
  

Проблема возникает, когда есть два идентичных ключа. Например, произнесите имя "John Doe" и "Jane Doe" , живите в одном городе: city1 . Поэтому city1 появляется дважды в массиве данных, как вы видите выше.

data определяется в этом методе:

   var data = new Array();
  $(document).ready(function(){

  $.each(personinfo,function(key,value){
    myarray.push(value['city'])
   });
  });
  

Как я могу различать city1 и city1 в приведенном выше массиве в функции нажатия клавиши?

Объект personinfo map:

 {"address":"07288 Albertha Station","city":"Littelside","created_at":"2011-05-25T19:24:51Z","id":1,"name":"Jane Doe","state":"Missouri","updated_at":"2011-05-26T21:25:54Z","zip":"75475-9938"},{OBJECT 2}, {OBJECT 3}, .... 
  

Комментарии:

1. Решение состоит в том, чтобы не использовать город в качестве отличительного признака. Что key в вашей personinfo карте?

2. Я включил хэш-объект, который я анализирую.

3. Подождите, это не имеет никакого смысла. Вы хотите выбрать из city1, city2, city и city1. В чем реальная проблема? Почему вы хотите проводить различие между city1 и city1 (которые не различимы)? Можете ли вы проиллюстрировать проблему на jsbin.com ?

4. Я не могу заставить его работать на jsbin, потому что я полагаюсь на плагин автозаполнения. На самом деле это простая проблема. Когда вы выбираете city1 в двух отдельных экземплярах, вы получаете тот же результат. Даже если, например, city1 — это Спрингфилд. Это может быть Спрингфилд, Калифорния или Нью-Йорк — приведенный выше код всегда возвращает один и тот же результат, Нью-Йорк.

5. данные — это массив возможностей, который используется в качестве данных для плагина автозаполнения (см. Ссылку)

Ответ №1:

Как следует из некоторых комментариев, проблему невозможно устранить с помощью идентичных ключей: единственный способ исправить это — использовать неидентичные ключи 🙂

Я бы просто объединил город и штат, чтобы создать ключ; похоже, это должно дать вам уникальный набор ключей.

Ответ №2:

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

Как в lookup = { data: ['name1', 'name2', 'name2', 'namex'], ref:[1,2,3,4] }

Так что, когда пользователь выбирает второе ‘name2’, плагин вернет выбранное ‘name2’ и ссылку 3. Это зависит от плагина, поддерживает ли он эту функциональность, но даже если это не так, вы должны иметь возможность слегка ее модифицировать.