Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set custom html template in bootstrap 3 typeahead dropdownlist

I have wrote following code:

      $('#pretraga').typeahead({
          hint: true,
          highlight: true,
          minLength: 2

      },
  {
      name: 'kategorije',
      displayKey: 'value',
      // `ttAdapter` wraps the suggestion engine in an adapter that
      // is compatible with the typeahead jQuery plugin
      source: kategorije.ttAdapter()

  });

Does someone has a hint how to set custom html template for dropdown items?

Thank you in advance

like image 788
user576700 Avatar asked Sep 03 '14 18:09

user576700


1 Answers

With bootstrap-3-typeahead I think you can't use the template property. In this case is better to use highlighter. Example:

$('#employees').typeahead({
                    highlighter: function (item) {
                        var parts = item.split('#'),
                            html = '<div class="typeahead">';
                        html += '<div class="pull-left margin-small">';
                        html += '<div class="text-left"><strong>' + parts[0] + '</strong></div>';
                        html += '<div class="text-left">' + parts[1] + '</div>';
                        html += '</div>';
                        html += '<div class="clearfix"></div>';
                        html += '</div>';
                        return html;
                    },
                    source: function (query, process) {

                        var employees = [];

                        return $.post('employee/search', { query: '%' + query + '%' }, function (data) {

                            // Loop through and push to the array
                            $.each(data, function (i, e) {
                                employees.push(e.name + "#" + e.number);
                            });


                            // Process the details
                            process(employees);
                        });

                    }
                }
                )

So you can build the html template that is shown.

If you want to keep the highlight feature, use this regexp

var name = parts[1].replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
                            return '<strong>' + match + '</strong>'
                        });

and

                        html += '<div class="text-left">' + name + '</div>';
like image 119
love2code Avatar answered Oct 20 '22 02:10

love2code