¿Cómo detengo la propagación de eventos haciendo clic derecho en el marcador de folleto?


9

No encontré un evento de clic derecho en los marcadores de folleto, así que comencé a escuchar el evento de mousedown. En el método que resuelve este evento, verifico

if (event.originalEvent.button == 2) {
    do_something();
    // now i want to stop propagation of the rightclick
    return;
}

Esto funciona cuando se llama a do_something (), pero el evento se propaga al mapa y se muestra un menú contextual. ¿Cómo evito que el evento se propague al mapa?

¿Funciona esto en todos los principales navegadores (es decir, IE)?

Respuestas:


4

Aparentemente, mi primera respuesta no estaba funcionando y ahora estoy enfrentando el mismo problema. Aquí hay un nuevo enfoque:

El folleto admite un evento llamado contextmenu. Como se encuentra en la documentación del evento del folleto aquí .

Se activa cuando el usuario presiona el botón derecho del mouse en el mapa, evita que se muestre el menú contextual predeterminado del navegador si hay oyentes en este evento.

Entonces teóricamente el código

marker.on('contextmenu', function(e) {
  this.openPopup();
});

debería funcionar bien. Pero aparentemente la implementación va a la zaga de la documentación. A partir de ahora (Folleto 0.4.5) el contextmenuevento aparentemente todavía no es compatible con los marcadores, aunque funciona perfectamente bien en objetos de polilínea.

Parece que hay trabajo en proceso para habilitar esta función en el futuro cercano (ver discusiones aquí y aquí ). Entonces, supongo que podemos esperar que Leaflet trabaje en esto rápidamente y permita el evento en el próximo lanzamiento ...

Editar: ignore lo que dije acerca de esperar la implementación. Si descarga la última rama maestra de desarrollo y crea el folleto usted mismo, obtendrá soporte completo para contextmenueventos en marcadores. Feliz codificación


4

Prevención del comportamiento predeterminado en IE y todos los demás navegadores:

event.returnValue = false;
if (event.preventDefault) event.preventDefault();

No parece funcionar. ¿Has probado esto en Leaflet? ¿Y es su evento un evento de folleto o el DOMMouseEvent original disparado por el navegador?
MRG

Esto es para un evento DOM. Si Leaflet ajusta eventos, use event.originalEvent.
tmcw

4

Prueba esta función interna:

L.DomEvent.stopPropagation(event);

Debería hacer el truco.

PD: nunca encontré eso en ninguna documentación, pero vi que se usaba en un parche. Úselo bajo su propio riesgo. ;)

Editar: también encontré esta función interna

L.DomEvent.preventDefault(event);

Lo que parece ser muy similar a lo event.preventDefault()que está en jQuery.


Usé tu fragmento, pero lo que sucede es lo mismo que con la solución de tmcw. Hago clic derecho en mi marcador. Va al método de escucha. Allí elimina el marcador (eso es lo que debería hacer el clic derecho para mí) y luego se abre un menú contextual en el mapa donde hice clic como si todo el marcador no sucediera.
MRG

Por casualidad acabo de encontrar esto L.DomEvent.preventDefault(event);. Por lo que he visto (mirando la fuente de Leaflet.js) esto debería ser muy similar al preventDefault()proporcionado por jQuery ... ¡Pruébelo! :)
fgysin restablece a Mónica el

Lo intenté, pero el menú contextual estándar que obtengo en FF cuando hago clic derecho en una página html sigue apareciendo.
MRG

2

Por cierto, obtuve una solución para detener el evento.

Por ejemplo, si un evento se crea así map.on("click", onMapClick);, el evento se puede detener con este código.map.off("click", onMapClick);

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.