2012-04-25 25 views
9

Estoy intentando construir una aplicación de mapa usando leaflet.js y no puedo encontrar la manera de usar el método .off. La documentación no tiene ningún ejemplo y parece que no puedo encontrar nada en otro lugar en línea. He destilado el problema en un trozo de código más simple, por lo que mi pregunta podría ser más clara.¿Cómo se usa el método de evento .off() en leaflet.js?

Básicamente lo tengo configurado para que cuando haga clic en el enlace "habilitar clic" se agregará un oyente de eventos que agrega un marcador al mapa cada vez que haga clic en él. Quiero eliminar ese detector de eventos cuando haga clic en "desactivar clic".

Here is a link to the demo

Aquí está el código que tengo ahora.

$(document).ready(function(){ 

var map, cloudmade, sanAntonio, polygonPoints 


map = new L.Map('map'); 
cloudmade = new L.TileLayer('http://{s}.tile.cloudmade.com/d4334cd6077140e3b92ccfae2b363070/997/256/{z}/{x}/{y}.png', { 
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>', 
    maxZoom: 18 
}); 


sanAntonio = new L.LatLng(29.4238889, -98.4933333); // geographical point (longitude and latitude) 


map.setView(sanAntonio, 13).addLayer(cloudmade); 

//everything above sets up the map 



function enableClick(){ 
    map.on('click', function(e) {  
    var marker = new L.Marker(e.latlng, {draggable:true}); 
    map.addLayer(marker); 
    });//closes the click function 

    this.disableClick = function(){ 
    map.off('click'); 
    } 

} 



//when 
$('#enable_click').click(function(){ 
    var enable_click = new enableClick() 

    $('#disable_click').click(function(){ 
    enable_click.disableClick; 
    }); 

}); 




});//closes the document ready function 

Ya he probado un montón de cosas diferentes por lo que todo el asunto 'this.disableClick' es la última cosa extraña que he probado. Alguien tiene una pista?

Respuesta

17

Es necesario pasar a la función on y off por referencia:

function doStuff() { ... } 

map.on('click', doStuff); 
... 
map.off('click', doStuff); 
+2

es la función sigue siendo necesario cuando se utiliza fuera? – fuzz

+0

Sí. Esto es probablemente porque puede vincular múltiples manejadores (funciones) a un solo evento. Ver http://leafletjs.com/reference.html#events – nothingisnecessary

+0

hola, he intentado esto, pero no tuve suerte, this.map.off ('click', function (evt) { console.log ("click deshabilitado "); }); – AhammadaliPK

Cuestiones relacionadas