2013-09-04 3 views
9

In uno dei nostri progetti utilizziamo Leaflet insieme al plug-in Leaflet.markercluster. Guardando attraverso le fonti di Leaflet ho scoperto che si aggiunge la funzione _collapse() all'evento click della mappa, quindi ogni volta che clicco sulla mappa si contrae un cluster precedentemente espanso.
Ora, voglio disabilitare questo comportamento. Se il cluster è espanso, voglio solo deselezionare tutti i suoi marcatori sull'evento click (e non contrarre il cluster stesso). Ecco il pezzo del mio codice:Arresta la propagazione dell'evento "clic" in Opuscolo

map.on('click', function(e) { 
    scope.deselectAllMarkers(); 
}); 

Ho provato ad aggiungere le seguenti righe alla fine di questa linea di richiamata al fine di fermare la propagazione di click evento:

scope.L.DomEvent.stopPropagation(e);
scope.L.DomEvent.preventDefault(e);
scope.L.DomEvent.stop(e);
scope.L.DomEvent.stopPropagation(e.originalEvent);
scope.L.DomEvent.preventDefault(e.originalEvent);
scope.L.DomEvent.stop(e.originalEvent);

E nessuno di loro funziona. Il listener predefinito nascosto all'interno delle fonti Leaflet mantiene la sua chiamata ogni volta che clicco sulla mappa. Mi sto perdendo qualcosa?

+0

Hai trovato una soluzione a questo, alla fine? –

risposta

0

Alla fine ho risolto il problema con la rimozione manuale del gestore predefinito click che stava richiamando il metodo _collapse(), per quanto mi ricordo. Sporco, ma ha funzionato.

0

Hai uso come questo event.stopPropagation()

map.on('click', function(e) { //don't forget to pass this 'e' event parameter 
    e.preventDefault(); 
    scope.deselectAllMarkers();   
    e.stopPropagation(); 
    return false;  
}); 

prova alcuno di questo

1. event.stopPropagation()
2. event.preventDefault()
3. return false

+0

Ho provato tutti loro - senza fortuna. 'L.DomEvent.preventDefault (e)' e 'L.DomEvent.stopPropagation (e)' invocano 'e.preventDefault()' e 'e.stopPropagation()' rispettivamente. – aga

+0

Hai provato la tua risposta? –

15

So che questa risposta è abbastanza tardi , ma se qualcuno è interessato a una soluzione, ecco come l'ho risolto.

Questo frammento di seguito è un esempio di associazione di una funzione all'evento click.

map.on('click', doSomething); 

In realtà, dopo aver verificato leaflet's API e un po 'di debug geekish, sembra che l'evento restituisce un oggetto, non è l'evento stesso. L'evento stesso viene inserito in un campo all'interno dell'oggetto restituito.

var doSomething = function(map) { 
    // stop propagation 
    map.originalEvent.preventDefault(); 
}; 

Quando si utilizza il frammento di codice, il gorgogliare evento si è fermato, cosa che ho voluto, e probabilmente quello che si voleva.

1

Non è possibile sovrascrivere la propagazione dell'evento da un gestore eventi. È necessario utilizzare l'helper Leaflet incorporato dopo che la pagina è stata caricata, in questo modo:

$('.element').each (i,el)-> 

    L.DomEvent.disableClickPropagation(el);