Здесь 3 флажка, и можно установить любую их комбинацию. . Каждый маркер имеет свойство, называемое «типы», которое может содержать любую комбинацию из трех значений (это карта магазинов, в которых могут быть безалкогольные напитки, ложки и/или молочные коктейли, поэтому «мягкий коктейль с ложкой», «мягкая ложка», « мягкое встряхивание", "встряхивание совком", "совок", "встряхивание").
- Поэтому сначала я проверяю, какие значения проверяются, и добавляю их в строку .
- Затем я проверяю, не отмечен ли ни один из них, и если да, то все маркеры должны быть показаны.
- Затем я проверяю, имеет ли маркер все 3 значения в в этом случае он всегда должен отображаться (поскольку он соответствует всем значениям).
- Наконец, я проверяю, находятся ли определенные выбранные значения на маркере. Он работает нормально, если он точно такой же, но если вариант 3 является единственным выбранным значением, а маркер имеет оба варианта 2 и 3, он все равно должен отображаться.
Я тоже пробовал работать с массивами, но раздел фильтров в Leaflet не совсем хорошо описан, и JavaScript не является моим «родным языком».
var geojsonLayer = new L.GeoJSON.AJAX("data/map.geojson", {
pointToLayer: pointToLayer,
filter: icefilter
});
function icefilter(json) {
var icetypeFilter = "";
var cond1 = true;
$("input[name=icetype]").each(function () {
if (this.checked) {
icetypeFilter = icetypeFilter + " " + this.value;
}
});
var att = json.properties.types;
if (icetypeFilter.length == 0) {
cond1 = true;
} else if (att == " soft scoop shake") {
cond1 = true;
} else {
cond1 = att == icetypeFilter; //Works fine with this one
//cond1 = att.indexOf(icetypeFilter) >= 0; //The moment I activate this line and remove the one above everything is broken and no markers are shown - even with no filters selected.
}
return cond1;
}
$("input[name=icetype]").click(function () {
clusterLayer.clearLayers();
geojsonLayer.refresh();
locationList();
});
Подробнее здесь: https://stackoverflow.com/questions/789 ... -or-search
Мобильная версия