Javascript 传单标记和';onclick';事件

Javascript 传单标记和';onclick';事件,javascript,callback,onclick,leaflet,marker,Javascript,Callback,Onclick,Leaflet,Marker,我正在使用PHP7,传单1.5.1,我希望在单击标记以不同于地图的DIV显示内容时调用AJAX 问题在于该函数不等待“单击”,而是在加载页面并在DIV中显示它侦听最后一个标记的参数时自动激活 当然,当我点击一个标记时,什么也没发生 想法 剧本 <script src='https://code.jquery.com/jquery-3.4.1.js' integrity='sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=' crossor

我正在使用PHP7,传单1.5.1,我希望在单击标记以不同于地图的DIV显示内容时调用AJAX

问题在于该函数不等待“单击”,而是在加载页面并在DIV中显示它侦听最后一个标记的参数时自动激活

当然,当我点击一个标记时,什么也没发生

想法

剧本

<script src='https://code.jquery.com/jquery-3.4.1.js' integrity='sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=' crossorigin='anonymous'></script>
    <script>
     function mostrar2(id){
     var parametro = {id : id};
     $.ajax({
       data: parametro,
       url: 'elphp.php',
       type: 'post',
       beforeSend: function(){$("#panel").html("Thinking...");},
       success: function(response){$("#panel").html(response)}
       });        
     }
    </script>

函数mostrar2(id){
var parametro={id:id};
$.ajax({
数据:parametro,
url:'elphp.php',
键入:“post”,
beforeSend:function(){$(“#panel”).html(“Thinking…”);},
成功:函数(响应){$(“#panel”).html(响应)}
});        
}
听的人

<div class="col-lg-3" id="panel">

地图组

<div class="col-lg-9 map" id="map" style="width: 400px; height: 400px;">
 <script>
  var mymap = L.map('map').setView([51.505, -0.09], 13);
  L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
     maxZoom: 18,
     attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
                '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
                'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
     id: 'mapbox.streets'
}).addTo(mymap);

L.marker([51.5, -0.09]).addTo(mymap).on('click', mostrar2(15741));
L.marker([51.5, -0.99]).addTo(mymap).on('click', mostrar2('11'));

</script>
</div>

var mymap=L.map('map').setView([51.505,-0.09],13);
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyj1ijoibwwwwym94iiwiysi6imnpejy4nxvycta2emycxbdhrqcmz3n3gifq.rjfig214ariislb6b5aw'{
maxZoom:18,
属性:“映射数据©;贡献者”+
', ' +
“图像”,
id:“地图盒。街道”
}).addTo(mymap);
L.marker([51.5,-0.09])。添加到(mymap)。在('click',mostrar2(15741));
L.marker([51.5,-0.99]).addTo(mymap).on('click',mostrar2('11'));
还有PHP

<?php
    $trajo = $_POST['id'];
    echo "YOU SENT : " . $trajo;
?>


一个朋友用这个简单的改变解决了这个问题

问题是:
mostrar2
函数已立即执行,并且由于mostrar2不返回任何内容(未隐式定义),因此没有在标记上注册的单击事件处理程序

通过在匿名函数中使用预定义id包装对
mostrar2
的调用,并将该函数作为每个标记的单击事件处理程序传递,
mostrar2
调用现在仅在标记上触发具有适当id的单击事件时才会发生

L.marker([51.5, -0.39]).addTo(mymap)
   .on('click', function () {
       mostrar2('15');
   }
);