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, время: 00:56. |