【问题标题】:Adding buttons inside Leaflet popup在 Leaflet 弹出窗口中添加按钮
【发布时间】:2017-03-04 18:06:18
【问题描述】:

当我尝试在 Leaflet 弹出窗口中添加按钮时遇到问题。单击地图时会生成弹出窗口。

理想情况下,我想弹出 2 个按钮:

  • 从这里开始
  • 然后去这个位置

这个草图是我想要的结果的一个例子:

 ________________________________________________
|You clicked the map at LatLng(XXXXX,XXXXX)      |
|  ---------------    -------------------        |
| |Start from here|  |Go to this location|       |
|  ---------------    -------------------        |
|___________________  ___________________________|
                   \/

这是我在弹出窗口中看到的内容:您在 LatLng(XXXXX,XXXX) [object HTMLButtonElement] 处单击了地图

我正在尝试使用 L.domUtil 创建按钮

defineYourWaypointOnClick(e: any) {

var choicePopUp = L.popup();
var container = L.DomUtil.create('div'),
  startBtn = this.createButton('Start from this location', container),
  destBtn = this.createButton('Go to this location', container);

choicePopUp
  .setLatLng(e.latlng)
  .setContent('You clicked the map at ' + e.latlng.toString() + '<br>' + startBtn)
  .openOn(this.map);

L.DomEvent.on(startBtn, 'click', () => {
  alert("toto");
});

L.DomEvent.on(destBtn, 'click', () => {
  alert("tata");
});
}

createButton(label: string, container: any) {
    var btn = L.DomUtil.create('button', '', container);
    btn.setAttribute('type', 'button');
    btn.innerHTML = label;
    return btn;
}

我从这里调用我的方法:

this.map.on('click', (e: any) => {
  this.defineYourWaypointOnClick(e);
});

提前感谢您能给我的任何帮助:)

【问题讨论】:

    标签: javascript angular typescript leaflet


    【解决方案1】:

    您应该使用 innerHTML 向您的传单添加按钮,如下所示

    defineYourWaypointOnClick(e: any) {
    
    var choicePopUp = L.popup();
    var container = L.DomUtil.create('div');
    //////////////////////////////////////////////////////////////////////////////////////////////
    ///////////modified here
    startBtn = this.createButton('Start from this location', container),
    destBtn = this.createButton('Go to this location', container);
    div.innerHTML = ''+startBtn+ '&nbsp;&nbsp;&nbsp;&nbsp;' + destBtn ; 
    //////////////////////////////////////////////////////////////////////////////////////////////
    
    choicePopUp
      .setLatLng(e.latlng)
      .setContent('You clicked the map at ' + e.latlng.toString() + '<br>' + startBtn)
      .openOn(this.map);
    
    L.DomEvent.on(startBtn, 'click', () => {
      alert("toto");
    });
    
    L.DomEvent.on(destBtn, 'click', () => {
      alert("tata");
    });
    }
    
    createButton(label: string, container: any) {
    var btn = L.DomUtil.create('button', '', container);
    btn.setAttribute('type', 'button');
    btn.innerHTML = label;
    return btn;
    }
    

    【讨论】:

    • div 未定义。 startBtn 和 destBtn 仍然是 HTML 元素,而不是字符串。
    • 我刚刚发现我的代码可以正常工作,我所要做的就是只将容器放在弹出窗口中:.setContent(container)
    • 所以我的回答没用了?
    • 代码不起作用,因为您无法连接 DOM 元素和字符串。但是由于答案被标记为已解决,因此我还创建了 cmets 中提到的代码修订版。这也是给别人看的。我没有时间制作小提琴,但这应该会奏效。
    • Jereme Causing 是正确的,上面的代码都不能正常工作,问题是混合 DOM 元素和字符串最终会像“您在 ... [ObjectButtonInputElement] 处单击的地图”而不是正确的对象.我不知道他们为什么没有这个问题。为了正常工作,我使用 .appendChild 将一个对象嵌套在另一个对象中(按钮到容器)。
    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2019-01-11
    • 2017-11-25
    相关资源
    最近更新 更多