带参数的点击会导致 javascript 语法错误

Onclick with argument causes javascript syntax error

单击 ID "elem" 的元素时,我得到了 "Uncaught SyntaxError: Unexpected identifier"。你能告诉我如何解决这个问题吗?

formulaireDB.allDocs({
    include_docs: true
}).then(function(result) {

    for (x in result.rows) {
        docFeature = result.rows[x].doc;
        coord_nv = [docFeature.geometry.coordinates[0], 
                    docFeature.geometry.coordinates[1]];
         position = to3857(coord_nv);

        map.addOverlay(new ol.Overlay({
            position: ol.proj.transform(
                [docFeature.geometry.coordinates[0],
                docFeature.geometry.coordinates[1]],
                'EPSG:4326',
                'EPSG:3857'),
                 element: $('<img id="elem" onclick="clickmarker(' 
                           + result + ',' + x  + ')" src="./img/pin32.png">')
        }));
    }
}).catch(function(err) {
    console.log(err);
});

}

function clickmarker(rt, ind) {
    var res = rt.rows[ind].doc.geometry.coordinates;
    console.log(res);
}

你的 catch 函数后有一个额外的大括号。试试这个:

formulaireDB.allDocs({
  include_docs: true
}).then(function(result) {


  for (x in result.rows) {
    docFeature = result.rows[x].doc;
    coord_nv = [docFeature.geometry.coordinates[0], docFeature.geometry.coordinates[1]];
    position = to3857(coord_nv);
    // add marker

    map.addOverlay(new ol.Overlay({
      position: ol.proj.transform(
        [docFeature.geometry.coordinates[0], docFeature.geometry.coordinates[1]],
        'EPSG:4326',
        'EPSG:3857'
      ),
      element: $('<img id="elem" onclick="clickmarker(' + result + ',' + x + ')" src="./img/pin32.png">')
    }));



  }
}).catch(function(err) {
  console.log(err);
});



function clickmarker(rt, ind) {
  var res = rt.rows[ind].doc.geometry.coordinates;
  console.log(res);
}

您正在将 result 连接到一个字符串,并在这一行中丢失了它作为对象的值:

element: $('<img id="elem" onclick="clickmarker(' + result + ',' + x  + ')" src="./img/pin32.png">')

您可能需要在点击监听器创建之后添加它,而不是直接添加。

例如

element: $('<img...>').on('click',function(){ clickmarker(result,x); });