我真的不明白为什么我不能单独添加监听器而不是在创建标记时添加它。看看代码,这样你就可以有一个更清晰的想法。
这是我的完整脚本:
<script>
map = L.map('map');
var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
var osmAttrib = 'http://openstreetmap.org';
var osm = new L.TileLayer(osmUrl, { minZoom: 8, maxZoom: 12, attribution: osmAttrib });
map.setView(new L.LatLng(51.3, 0.7), 9);
map.addLayer(osm);
map.panTo(new L.LatLng(21.0285, 105.8542));
var marker;
function onMapClick(e) {
marker = L.marker([e.latlng.lat, e.latlng.lng]).addTo(map).on('click', onMarkerClick);
var divAnimation = $("div.infoTab");
divAnimation.animate({ top: '100%' }, "slow");
}
map.on('click', onMapClick);
function onMapDrag(e) {
}
function onMarkerClick(e) {
//marker.bindPopup("I have just clicked this marker.").openPopup();
var divAnimation = $("div.infoTab");
divAnimation.animate({top: '30%'}, "slow");
}
//marker.on('click', onMarkerClick);
</script>
上面的脚本正在运行,但是当我第一次创建它时,它无效:
function onMarkerClick(e) {
//marker.bindPopup("I have just clicked this marker.").openPopup();
var divAnimation = $("div.infoTab");
divAnimation.animate({top: '30%'}, "slow");
}
marker.on('click', onMarkerClick);
有人能解释为什么会这样吗?
答案 0 :(得分:0)
点击marker
后,您的map
已分配。因此,当您在marker
上注册点击事件时,marker
为undefined
。