У меня проблема. Как автозаполнение, когда я что-то ищу?
У меня есть это:
<form>
<div class="col-sm-11">
<input type="text" name="busca" id="txtSearch" class="form-control" placeholder="Buscar..." />
</div>
<button class="btn btn-default" id="btnSearch"><i class="fa fa-search"></i></button>
</form>
Ничего больше, просто форма с входным текстом и buttom. Когда я пишу что-нибудь, что мне нужно, это автозаполнение, когда вы найдете слово "щелчок" в buttom.
И у моих Js есть:
stComerciaisLayer = L.geoJSON(setoresComerciais, {
style: function (feature) {
...
},
onEachFeature: onEachFeature
}).addTo(map);
Переменная stComercialLayer - это объект, который генерирует слои отображения. setoresComerciais - та же переменная в моем json (geoSetoresComerciais)
setoresComerciais={
"type": "FeatureCollection",
"totalFeatures": 116,
"features": [
{
(...)
а также
$("#txtSearch").autocomplete({
source: setoresComerciais
});
это автозаполнение, но источник, мне нужна функция или массив для работы, я думаю.
Проблема заключается в том, что stComerciaisLayer является объектом, а источник просто принимает тип Array, String или Function, соответствует документации jQuery jQuery: (Что мне нужно сделать?
Возобновление: мне просто нужно, чтобы автозаполнение работало! Мой код находится на git:
https://github.com/eltonsantos/leaflet-tests/tree/master/teste2
Спасибо!!
Да, вы правы, вам нужно передать массив в источник ниже:
$("#txtSearch").autocomplete({
source: setoresComerciais
});
И, как вы заметили, setoresComerciais является объектом geojson. Но этот geojson содержит множество функций внутри, и мы можем использовать это для работы автозамены.
Поскольку ваш geojson - это набор функций: type:"FeatureCollection"
, все ваши функции расположены в setoresComerciais.features (массив). Каждая функция также является объектом, но если мы перебираем каждую функцию в этом массиве с помощью array.map(), мы можем получить массив, содержащий одну строку для каждой функции, которую вы можете использовать для функции автозаполнения:
$("#txtSearch").autocomplete({
source: setoresComerciais.features.map(function(d) { return d.properties.sco_dsc_sa; })
});
.map позволяет использовать для итерации через массив признаков, функция принимает один аргумент (элемент в массиве) и позволяет нам возвращать значение в новый массив (поскольку массив возвращается.map()).
Я выбрал свойство наугад (есть дубликаты, вы можете удалить их относительно легко, но я предполагаю, что вы выберете свойство, уникальное для каждого маркера).