创建一个Leaflet自定义复选框控件。

15

我想创建一个自定义复选框控件,它将在jquery / javascript中简单地设置标志:如果选中,则flag = 'clustered';如果未选中,则flag ='unclustered'。到目前为止,我在地图上有一个控件,但它不是复选框,我该如何获取复选框的状态 - 是否已选中/未选中。

代码:

function MapShowCommand() {
  alert("checked / unchecked"); //set flag
}

L.Control.Command = L.Control.extend({
    options: {
        position: 'topleft',
    },

    onAdd: function (map) {
        var controlDiv = L.DomUtil.create('div', 'leaflet-control-command');
        L.DomEvent
            .addListener(controlDiv, 'click', L.DomEvent.stopPropagation)
            .addListener(controlDiv, 'click', L.DomEvent.preventDefault)
        .addListener(controlDiv, 'click', function () { MapShowCommand(); });

        var controlUI = L.DomUtil.create('div', 'leaflet-control-command-interior', controlDiv);
        controlUI.title = 'Map Commands';
        return controlDiv;
            }
    });
var test = new L.Control.Command();
map.addControl(test);
2个回答

27

你需要在你的 controlDiv 中创建一个 input 类型为 "checkbox" 的表单元素。

// create the control
var command = L.control({position: 'topright'});

command.onAdd = function (map) {
    var div = L.DomUtil.create('div', 'command');

    div.innerHTML = '<form><input id="command" type="checkbox"/>command</form>'; 
    return div;
};

command.addTo(map);


// add the event handler
function handleCommand() {
   alert("Clicked, checked = " + this.checked);
}

document.getElementById ("command").addEventListener ("click", handleCommand, false);

这个jsfiddle中的代码可以正常工作:http://jsfiddle.net/FranceImage/ao33674e/

你也可以按照Leaflet的方式进行操作,参考以下链接获取提示信息:https://github.com/Leaflet/Leaflet/blob/master/src/control/Control.Layers.js


你能否给一个例子帮助我理解如何使用上述表单? - user2906420

5

我偶然发现了这个问题,尽管已有的答案指引了我正确的方向,但我对其进行了微调以添加合适的 css 类。

function toggleFunction(bool) {
  alert(bool)
}

var command = L.control({position: 'topright'});
command.onAdd = function (map) {
    var div = L.DomUtil.create('div');
    div.innerHTML = `
    <div class="leaflet-control-layers leaflet-control-layers-expanded">
      <form>
        <input class="leaflet-control-layers-overlays" id="command" 
          onclick=toggleFunction(this.checked) type="checkbox">
          Toggle
        </input>
      </form>
    </div>`; 
    return div;
};
command.addTo(mymap); //your map variable

结果:

这里输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接