Bootstrap 3 typeahead.js - 按类型的部分查询

时间:2013-08-19 21:44:08

标签: twitter-bootstrap twitter-bootstrap-3 bootstrap-typeahead typeahead typeahead.js

我正在尝试使用输入值的最后一部分来调用我的远程URL。 我想做这样的事情:

    $('#typeahead').typeahead({
    remote: {
        url: '/ajax/tags/get/?name=%QUERY',
        replace: function (url, query) {
            var last = query.split(',');
            last = $.trim(last[last.length-1]);
            return url.replace('%QUERY', last);
        }
    },
    limit : 10
});

当选择下拉项时,

enter image description here

将新值添加到行尾

enter image description here

知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:0)

假设“查询最后一部分”对您有用,您可以使用filter: function(response) {...}填充并返回一个具有相应valuetitle的基准数组来执行您的操作想。

答案 1 :(得分:0)

对于Bootstrap 3,您可以使用Bootstrap-3-Typeahead

您必须覆盖updatermatcher功能。对于matcher函数,您可以使用replace函数中的代码,如下所示:

matcher: function (item) {
        var last = this.query.split(',');
        this.query = $.trim(last[last.length-1]);

        if(this.query.length) return ~item.toLowerCase().indexOf(this.query.toLowerCase());
}

update使用以下代码:

updater: function (item) {
      return this.$element.val().replace(new RegExp(this.query + '$'),'') + item + ',';
    }

(匹配最后一次出现:JavaScript: replace last occurrence of text in a string

完整示例:

$('.typeahead').typeahead (
{
items: 4,
source: function (query, process) {
    states = [];
    map = {};


    var data = [
        {"stateCode": "CA", "stateName": "California"},
        {"stateCode": "AZ", "stateName": "Arizona"},
        {"stateCode": "NY", "stateName": "New York"},
        {"stateCode": "NV", "stateName": "Nevada"},
        {"stateCode": "OH", "stateName": "Ohio"}
    ];

    $.each(data, function (i, state) {
        map[state.stateName] = state;
        states.push(state.stateName);
    });

    process(states);

}

  , updater: function (item) {
      return this.$element.val().replace(new RegExp(this.query + '$'),'') + item + ',';
    }
    , matcher: function (item) {
        var last = this.query.split(',');
        this.query = $.trim(last[last.length-1]);

        if(this.query.length) return ~item.toLowerCase().indexOf(this.query.toLowerCase());
    }
    }

);