So, I have a leaflet map...
var map = L.map('map').setView([35.772219, -78.675272], 17);
map.on('click', function(e) {alert('map click!')});
and I add a marker...
var marker = L.circleMarker([35.772219, -78.675272]);
marker.on('click', function(e) {alert('marker click!')});
marker.addTo(map);
If I click on the marker, both the marker and map click events fire, but I only want the click event for the marker... Is there any way to accomplish this? I can't seem to find one in the docs.
L.DomEvent.stopPropagation should do the trick:
Stop the given event from propagation to parent elements. Used inside the listener functions:
marker.on('click', function(e) {
L.DomEvent.stopPropagation(e);
console.log('marker click!')
});
And a demo (one circle cancels its event and not the other)
var map = L.map('map').setView([35.772219, -78.675272], 10);
map.on('click', function(e) {console.log('map click!')});
var marker = L.circleMarker([35.772219, -78.68]);
marker.on('click', function(e) {
L.DomEvent.stopPropagation(e);
console.log('marker click!')
});
marker.addTo(map);
marker = L.circleMarker([35.772219, -78.63], {fillColor: 'red'});
marker.on('click', function(e) {
console.log('marker click with map click')
});
marker.addTo(map);
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
<div id="map" style="height: 100px"></div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With