2017-12-31 34 views
0

配列内のDOMオブジェクトごとにEventListenrを設定しようとすると問題が発生します。私が各DomEventについて定義した関数は、すべてのアイテムで同じになります(console.log(key)はすべてのアイテムの同じキー(ループの最後のキー)を出力します)。私のコードは次のようである:DomEventをループ内に設定する方法

var dom = {}; 
var popupContent = L.DomUtil.create('div'); 
for(var key in this._info){ 
    dom[key] = L.DomUtil.create('a', "", popupContent); 
    dom[key].innerHTML = key; 
    dom[key].href = "#"; 
    L.DomEvent.on(dom[key], 'click', function(){ 
     //do some stuff 
     console.log(key); 
    });   
} 

var popup = L.popup(); 
popup.setLatLng(latlng) 
     .setContent(popupContent) 
     .openOn(this._map); 

は、あなたが私を与えることができます任意の助けを事前にいただきありがとうございます:)

答えて

1

ここでの問題は、あなたのループの内部閉鎖機能付きです。

あなたはこのようにそれを修正することができます:

for(var key in this._info){ 
    (function(k) { 
    dom[k] = L.DomUtil.create('a', "", popupContent); 
    dom[k].innerHTML = key; 
    dom[k].href = "#"; 
    L.DomEvent.on(dom[k], 'click', function(){ 
     //do some stuff 
     console.log(k); 
    }); 
    })(key) 
} 

それともあなたは自分のループ内letの代わりvarを使用することができます。

詳細については、thisの質問を確認してください。

関連する問題