javascript - 使用 tabletop.js 在传单 map 中标记为什么它不起作用?

标签 javascript leaflet tabletop.js

我对 javascript 很菜鸟...我试图在类似的 thread 上找到问题的解决方案,但我不知道为什么它在我的情况下不起作用。我无法在那里发表评论,所以我添加了新问题。

我的所有代码都在这里:Link to Fiddle

当我更改示例代码时, map 停止显示。 我哪里做错了?谢谢你帮助我。

js的主要部分是这样的:

function myFunction() {

// Add MAP
var map = L.map('map').setView([54.151, 17.823], 9);
var basemap = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors',
    minZoom: 5,
    maxZoom: 19
});
basemap.addTo(map);

/* ----------------------------------------------- */
// ZOOMING TO DETECT LOCATION
// map.locate({setView: true, maxZoom: 16});
/* ----------------------------------------------- */
// INFO ABOUT DETECT LOCATION      
function onLocationFound(e) {
    var radius = e.accuracy;

    L.marker(e.latlng).addTo(map)
        .bindPopup("Jesteśw odległości " + radius + " [m] od tego punktu.").openPopup();

    L.circle(e.latlng, radius).addTo(map);
}

map.on('locationfound', onLocationFound);

// ERROR DETECT LOCATION
function onLocationError(e) {
    alert(e.message);
}

// MOUSE CLICK POSITION
var popup = L.popup();

function onMapClick(e) {
    popup
        .setLatLng(e.latlng)
        .setContent("" + e.latlng.toString())
        .openOn(map);
}

map.on('click', onMapClick);

/* ----------------------------------------------- */
// MARKERS
//  var pkt = L.marker([54.46791, 17.0288]).addTo(map).bindPopup("CIO");
/* ----------------------------------------------- */

function addPoints(data, tabletop) {
    for (var row in data) {
        var marker = L.marker([
            data[row].Latitude,
            data[row].Longitude
        ]).addTo(map);
        marker.bindPopup('<strong>' + data[row].Info + '</strong>');
    }
}

function init() {
    Tabletop.init({
        key: 'https://docs.google.com/spreadsheets/d/1BTlWo-T636OCGK-tRMHRP55MQ24OwQ-ZF9yOszyppxk/edit?usp=sharing',
        callback: addPoints,
        simpleSheet: true
    })
}
init()
}

最佳答案

JSFiddle 中的代码不起作用,因为默认的 JSFiddle javascript 加载类型设置为 On Load。这意味着它将加载 JavaScript 选项卡中的所有内容,而无需您手动加载任何内容。

但是你的整个事情都是通过 onload 回调到 myFunction() 来初始化的,并且在启用该设置的情况下它永远不会触发。您有两种可能的解决方案:

  • 如果您不想更改 Fiddle 配置中的任何内容,则需要从 body 标记中删除 onload 并更改 myFunction( ) 进入自调用函数:

    (function () { **函数体** }())

  • 或者只是编辑 Fiddle 设置(将“加载类型”更改为“无换行 - 底部”): enter image description here

关于javascript - 使用 tabletop.js 在传单 map 中标记为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938595/

相关文章:

javascript - Flask 和 gevent 的 CORS 错误

javascript - Promise 函数需要使用 return 吗?

javascript - 无法从另一个 .ts 文件访问 .ts 文件中定义的函数定义

javascript - 传单上下文菜单未显示在标记上

javascript - 如何在 JavaScript 中按字母顺序(升序和降序)排序

javascript - 值(value)验证

javascript - 如何在不刷新页面的情况下清除由传单绘制工具创建的先前图层?

webpack - 传单 map 图像路径

javascript - 切换隐藏/显示不适用于子级 div

javascript - 可缩放旭日可视化结果一团糟