JQ автозаполнение
Добрый вечер!
В коде ниже выборка берётся с массива var data = ["india", "usa", "canada", "japan", "uk", "south africa"]; и соответственно показывает результат по одному полю, но я хочу передать массив объектов и чтобы типа ; var data = [{ country : countryName ,city: cityName }, { country : countryName ,city: cityName }, { country : countryName ,city: cityName } ];вообщем большой список. Хочу, чтобы искало по целому объекту и в подсказку также попадал инфа с объекта. Сталкивался кто то, есть идеи как реализовать? <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css"/> <style> #search-query { width:300px; padding:5px 10px; margin-left:10px; } /****** jQuery Autocomplete CSS *************/ .ui-corner-all { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-menu { border: 1px solid lightgray; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; background-color: white; } .ui-menu .ui-menu-item a { color: #888; display: block; } .ui-menu .ui-menu-item a:hover { border: 1px solid lightgray; } .ui-menu .ui-menu-item:hover { display: block; text-decoration: none; color: #3D3D3D; cursor: pointer; background-color: lightgray; background-image: none; border:0; } .ui-widget-content .ui-state-hover, .ui-widget-content .ui-state-focus { border: 1px solid lightgray; background-image: none; background-color: lightgray; font-weight: bold; color: #3D3D3D; } </style> </head> <body> <label>Search:</label> <input id="search-query" type="text" /> <script> var $_searchQuery = $('#search-query'); var data = ["india", "usa", "canada", "japan", "uk", "south africa"]; $.ui.autocomplete.prototype._renderItem = function (ul, item) { var re = new RegExp($.trim(this.term.toLowerCase())); var t = item.label.replace(re, "<span style='font-weight:600;color:#5C5C5C;'>" + $.trim(this.term.toLowerCase()) + "</span>"); return $("<li></li>") .data("item.autocomplete", item) .append("<a>" + t + "</a>") .appendTo(ul); }; $_searchQuery.autocomplete({ source: data }); </script> </body> </html> |
Franky83,
непонятно в чём проблема, может документацию почитать? либо расшифруйте это подробнее Цитата:
|
Для примера , я в строке поиска нажал на букву "R" , скрипт нашел в массиве объект { country : "Russia", city: "sankt-peterburg"} мне вывалились подсказка (li) в котором 2 дива (один (Russia) под другим(sankt-peterburg) ) и подсвечиваются буквы в Russia и sankt-peterburg ( вторая не должна).
|
Franky83,
замените Цитата:
Цитата:
|
Цитата:
|
Вторая буква r в подсказке в слове sankt-peterburg не должна подсвечиваться
|
Franky83,
:-? зачем тогда показывать sankt-peterburg? |
Franky83,
и что должно быть в результате |
рони,
потому что он в одном объекте с country : "Russia" . Допустим основное поле для поиска country . В результате должен вывалиться список ,где в каждом элементе списка будет название страны и города. |
Franky83,
что останется в инпуте? |
Название страны пробел название города
|
autocomplete из обьекта
Franky83,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css"/> <style> #search-query { width:300px; padding:5px 10px; margin-left:10px; } /****** jQuery Autocomplete CSS *************/ .ui-corner-all { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-menu { border: 1px solid lightgray; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; background-color: white; } .ui-menu .ui-menu-item a { color: #888; display: block; } .ui-menu .ui-menu-item a:hover { border: 1px solid lightgray; } .ui-menu .ui-menu-item:hover { display: block; text-decoration: none; color: #3D3D3D; cursor: pointer; background-color: lightgray; background-image: none; border:0; } .ui-widget-content .ui-state-hover, .ui-widget-content .ui-state-focus { border: 1px solid lightgray; background-image: none; background-color: lightgray; font-weight: bold; color: #3D3D3D; } </style> </head> <body> <label>Search:</label> <input id="search-query" type="text" /> <script> var $_searchQuery = $("#search-query"); var data = [{ country: "Russia", city: "sankt-peterburg" }]; $.ui.autocomplete.prototype._renderItem = function(ul, item) { var re = new RegExp($.trim(this.term.toLowerCase()), "i"); var t = item.label.replace(re, "<span style='font-weight:600;color:#FF0000;'>" + "$&" + "</span>"); return $("<li></li>").data("item.autocomplete", item).append("<a>" + t + " " + item.city + "</a>").appendTo(ul) }; $_searchQuery.autocomplete({ source: function(request, response) { response($.map(data, function(item) { return { value: item.country + " " + item.city, label: item.country, city: item.city } })) } }); </script> </body> </html> |
рони,
спасибо тебе:thanks: Выручил. |
Franky83, добавлена фильтрация, в подсказке будут только найденные страны
var $_searchQuery = $("#search-query"); var data = [{ country: "Russia", city: "sankt-peterburg" }]; $.ui.autocomplete.prototype._renderItem = function(ul, item) { var re = new RegExp( "^" + $.ui.autocomplete.escapeRegex( this.term ), "i" ); var t = item.label.replace(re, "<span style='font-weight:600;color:#FF0000;'>" + "$&" + "</span>"); return $("<li></li>").data("item.autocomplete", item).append("<a>" + t + " " + item.city + "</a>").appendTo(ul) }; $_searchQuery.autocomplete({ source: function(request, response) { var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" ); response($.map(data, function(item) { return { value: item.country + " " + item.city, label: item.country, city: item.city } }).filter(function(item) { return matcher.test( item.label ); })) } }); |
рони,
ну спасибо тебе огромное) |
Часовой пояс GMT +3, время: 01:06. |