2012-04-25 15 views
9

私は、leaflet.jsを使ってマップアプリケーションを構築しようとしています。私は.offメソッドの使い方を理解できません。ドキュメンテーションには例がありません。他の場所では何も見つからないようです。問題をより単純なコードに掘り下げて、私の質問がより明確になるようにしました。leaflet.jsの.off()イベントメソッドをどのように使用しますか?

基本的には、「クリックを有効にする」リンクをクリックすると、クリックするたびに地図にマーカーを追加するイベントリスナーが追加されるように設定されています。 「クリックを無効にする」をクリックするとそのイベントリスナーを削除したいと思います。

Here is a link to the demo

ここで私が今持っているコードです。

$(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 

私はすでにさまざまなことを試みていますので、 'this.disableClick'の全体は私が試した最新の奇妙なものです。誰でも手掛かりがありますか?

答えて

17

あなたは、参照によりonoffに関数を渡す必要があります:オフ使用している場合

function doStuff() { ... } 

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

はまだ必要な機能ですか? – fuzz

+0

はい。これは、複数のハンドラ(関数)を1つのイベントにバインドできるためです。 http://leafletjs.com/reference.html#eventsを参照してください – nothingisnecessary

+0

こんにちは、私はこれを試しましたが、幸運、this.map.off( 'クリック'、関数(evt){ console.log( "クリック無効"); }); – AhammadaliPK

関連する問題