26 votos

Eventos de clic con Leaflet y geoJSON

¿Cómo puedo adjuntar un evento de clic a un geoJSON que luego ejecuta una función Ajax cuando se hace clic. He buscado en onEachFeature pero eso se ejecuta cuando se carga el geoJSON, no cuando se hace clic, ejecutando así una tonelada de llamadas ajax.

34voto

BWW Puntos 302

Estabas en el camino correcto con onEachFeature .

Es que tienes que enlazar el evento click en cada elemento.

Ver abajo (probado)

function whenClicked(e) {
  // e = event
  console.log(e);
  // You can make your ajax call declaration here
  //$.ajax(... 
}

function onEachFeature(feature, layer) {
    //bind click
    layer.on({
        click: whenClicked
    });
}

geojson = L.geoJson(your_data, {
    style: style,
    onEachFeature: onEachFeature
}).addTo(map);

0 votos

¿Existe una forma de tener un manejador de clics global, el mismo para todas las funciones sin hacer un bucle?

0 votos

No lo sé. En el tutorial oficial, siempre se utiliza esta forma, por ejemplo leafletjs.com/examples/geojson y leafletjs.com/examples/choropleth Supongo que querías un oyente como en un <ul> para conocer su <li> ¡¿Niño(s)?!

0 votos

Sí, en React he acabado añadiendo un onclick en el GeoJSON, de modo que al hacer clic en cualquier característica se desencadena una devolución de llamada. Pero para los estilos, por ejemplo, no parece existir, no se puede tener el mismo color para todas las características sin aplicar una función a cada característica (y tal vez eso tiene sentido técnicamente, simplemente no lo sé)

12voto

Puedes hacerlo con algo menos de código que la versión de ThomasG77:

function onEachFeature(feature, layer) {
    //bind click
    layer.on('click', function (e) {
      // e = event
      console.log(e);
      // You can make your ajax call declaration here
      //$.ajax(... 
    });

}

geojson = L.geoJson(your_data, {
    style: style,
    onEachFeature: onEachFeature
}).addTo(map);

5voto

todd kman Puntos 11

Otra forma como función inline

geojson = L.geoJson(your_data, {
style: style,
onEachFeature: function onEachFeature(feature, layer) {

layer.on('mouseover', function (e) {
  // e = event
  console.log(e);
  // You can make your ajax call declaration here
  //$.ajax(... 
  });}).addTo(map);

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X