Bootstrap Typeahead - не выбирать автоматически первый элемент? - PullRequest
10 голосов
/ 05 марта 2012

Я использую этот ответвление библиотеки заголовков типов Twitter Bootstrap , которая допускает асинхронные источники данных и события onselect.Пока это работает очень хорошо для меня, но когда пользователь уходит из поля (т.е. не выбирает активно выпадающую запись), запускается событие onselect (которое в моем случае перенаправляет пользователя на другую страницу).Можно ли как-нибудь остановить событие onselect, если пользователь не щелкает?Вот что я получил (в CoffeeScript):

$(document).ready ->
  $('#inspection_name').typeahead(
    source: (typeahead, query) ->
      $.ajax(
        url: "/inspections/search.json?name="+query
        success: (data) =>
          return_list = []
          $(data.results.inspections).each ->
            return_list.push("<span data-url='" + this.uri + "/edit'>" + this.name + ", " + this.town + "</span>") 

          typeahead.process(return_list)
      )

    onselect: (obj) =>
      window.location.href = $(obj).attr("data-url")
  )

Ответы [ 4 ]

6 голосов
/ 03 марта 2013

Для Bootstrap по умолчанию это будет работать:

$.fn.typeahead.Constructor.prototype.render = function (items) {

var that = this;

items = $(items).map(function (i, item) {
  i = $(that.options.item).attr('data-value', item);
  i.find('a').html(that.highlighter(item));
  return i[0];
});

this.$menu.html(items);
return this;
};

Где-то после включения начальной загрузки (мин.) Js

5 голосов
/ 24 апреля 2012

В конце я ответил на свой вопрос и внес поправки в эту суть:

https://gist.github.com/1977953

3 голосов
/ 22 ноября 2016

Вы можете установить атрибут в заголовке angular-bootstrap

typeahead-focus-first="false"

Аналогичная опция доступна для jQuery

1 голос
/ 27 августа 2013

Вся заслуга должна идти в @jrochkind, но я хотел бы получить ответ от Библиографическая глушь: переопределяющий тип начальной загрузки вперед, чтобы изначально не выбирать здесь для большей ясности.

Добавьте это куда-нибудь после bootstrap.js:

/**
 * Makes it so the first typeahead result isn't auto selected
 *
 * @author Jonathan Rochkind
 * @url http://bibwild.wordpress.com/2013/04/04/overriding-bootstrap-typeahead-to-not-initially-select/
 */
$.fn.typeahead.Constructor.prototype.select = function() {
    var val = this.$menu.find('.active').attr('data-value');
    if (val) {
        this.$element
            .val(this.updater(val))
            .change();
    }
    return this.hide()
};
var newRender = function(items) {
    var that = this

    items = $(items).map(function (i, item) {
        i = $(that.options.item).attr('data-value', item);
        i.find('a').html(that.highlighter(item));
        return i[0];
    });

    this.$menu.html(items);
    return this;
};
$.fn.typeahead.Constructor.prototype.render = newRender;
...