Кнопка для слоев всегда в активном состоянии, легенда сохраняется для 1-го слоя при добавлении 2-х слоев

У меня проблема с mapbox и tilemill:

Проверьте мой код здесь: http://bl.ocks.org/marishaf/3cc9bfbeb412c1120e93

Кнопки слоев ВСЕГДА выглядят, как будто они находятся в "активном" режиме, хотя они все еще загружают и выгружают слои.

Легенды загружаются для каждого слоя (легенды существуют для слоев Public Land и Zoning), но если вы загрузите оба, а затем попытаетесь удалить оба слоя, легенда останется для первого загруженного слоя.

Легенда сохраняется и с подсказками. Например, если сначала загрузить слой с легендой (это происходит только в том случае, если слои загружены в этом порядке), а затем слой с всплывающими подсказками (например, "Загрязнение источника") и навести курсор мыши на точку, чтобы вызвать всплывающую подсказку, а затем попробуйте удалить слой с легендой, легенда сохраняется.

1 ответ

Решение
  1. Удалить "link.className = 'active';" до функции onclick.
  2. Измените выражение "if (map.hasLayer(layer))", чтобы оно больше походило на выражение "else" ("layer" вместо "thelayer" и только одно "className" изменение).

Snippet:

link.href = '#';
// remove line that was here
link.innerHTML = name;


link.onclick = function(e) {
    e.preventDefault();
    e.stopPropagation();

    if (map.hasLayer(layer)) {
        map.removeLayer(layer);
        map.removeLayer(gridlayer);
        // you had "thelayer", but it should be "layer":
        map.legendControl.removeLegend(layer.getTileJSON().legend);
        // change two lines that were here to the following:
        this.className = '';
    } else {
        map.addLayer(layer);
        map.addLayer(gridlayer);
        this.className = 'active';
        map.legendControl.addLegend(layer.getTileJSON().legend);

    }
       thelayer = layer;  

};

Извините за грязное объяснение, но вы задавали два вопроса одновременно, и я думаю, что это самый чистый способ ответить.

Другие вопросы по тегам