jQuery typeahead перестает работать, когда я выбираю вариант из раскрывающегося списка

Я использую jQuery typeahead для автозаполнения, которое сначала работает идеально, но когда я выбираю вариант из списка, а затем пытаюсь использовать его снова (путем ввода ввода), он просто не показывает результаты снова.

Похоже, что typeahead уничтожается, когда я выбираю вариант.

Обновление №1

Я создал для вас jsfiddle, чтобы вы могли видеть, что происходит, вы можете ввести «кто-то» во входных данных, чтобы получить данные автозаполнения: http://jsfiddle.net/cristiangrojas/rhtd9o8k/3/

var Opportunities = new Bloodhound({
  datumTokenizer: function(d) {
    return Bloodhound.tokenizers.whitespace(
      '{id} {name} {identification} {email} {vehicle_registration}'.assign({
        "id": d["id"],
        "name": d["name"],
        "identification": d["identification"],
        "email": d["email"],
        "vehicle_registration": d["vehicle_registration"]
      })
    );
  },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  local: opportunities
});

Opportunities.initialize();

$('input[name="opportunities_search"]').typeahead({
  hint: true,
  highlight: true,
  minLenght: 1
}, {
  name: 'oportunidades',
  displayKey: 'id',
  source: Opportunities.ttAdapter(),
  templates: {
    empty: [
      '<div class="empty-message">',
      'No se encontró ninguna oportunidad',
      '</div>'
    ].join('\n'),
    suggestion: Handlebars.compile(
        '<p>' +
        'Opp #{{ id }}' +
        '<br>' +
        '{{ name }}' +
        '<br>' +
        'CC: {{ identification }}' +
        '<br>' +
        'email: {{ email }}' +
        '<br>' +
        'Placa: {{ vehicle_registration }}' +
        '</p>'
    )
  }
});

person Cristian Rojas    schedule 30.09.2014    source источник
comment
Можете ли вы сделать скрипку с проблемой?   -  person Bojan Petkovski    schedule 30.09.2014
comment
Я только что обновил вопрос с образцом кода и URL-адресом jsfiddle, который выглядит следующим образом: jsfiddle.net /cristiangrojas/rhtd9o8k/3   -  person Cristian Rojas    schedule 30.09.2014


Ответы (1)


Из документов:

https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md

displayKey — для данного объекта предложения определяет его строковое представление. Это будет использоваться при установке значения элемента управления вводом после выбора предложения. Может быть ключевой строкой или функцией, которая преобразует объект предложения в строку. Значение по умолчанию

Вы используете ключевую строку «id», но ваши данные json для id — это не строка, а число. Поэтому либо измените свои данные json, чтобы идентификатор был в виде строки, либо используйте функцию для возврата идентификатора в виде строки, как в этой скрипке:

displayKey: function(d){return d.id+'';},

http://jsfiddle.net/rhtd9o8k/19/

Где d — возвращаемый объект предложения, а добавление пустой строки к атрибуту id — это простой способ привести число к строке в javascript.

person Rel    schedule 03.10.2014
comment
Забыл упомянуть, что typeahead не уничтожался, он просто выдавал ошибку, когда пытался сравнить предыдущее значение ввода с текущим значением ввода, которое происходит после выбора элемента. - person Rel; 03.10.2014