2013-03-04 4 views
13

पर क्लिक श्रोता जोड़ें मैं वेबपैलिकेशन पर काम कर रहा हूं। मेरे पास एक Google मानचित्र है, जहां मैं एक सरणी से बहुभुज जोड़ता हूं। मैं उस सरणी के माध्यम से लूप और नक्शे पर बहुभुज जोड़ें। मैं भी बहुभुज क्लिक करने के लिए एक घटना श्रोता जोड़ सकते हैं और बहुभुजGoogle मानचित्र: प्रत्येक बहुभुज

यह की स्थिति सचेत करने के लिए मैं

map = new google.maps.Map(document.getElementById('map_canvas'), 
    mapOptions); 
//Loop on the polygonArray 
for (var i = 0; i < polygonArray.length; i++) { 
    //Add the polygon 
    var p = new google.maps.Polygon({ 
     paths: polygonArray[i], 
     strokeWeight: 0, 
     fillColor: '#FF0000', 
     fillOpacity: 0.6, 
     indexID: i 
    }); 
    p.setMap(map); 

    //Add the click listener 
    google.maps.event.addListener(p, 'click', function (event) { 
     //alert the index of the polygon 
     alert(p.indexID); 
    }); 
} 

समस्या

बहुभुज सब सही ढंग से बना रहे हैं क्या कर रहा है की जरूरत है । हालांकि समस्या यह है कि जब मैं बहुभुज पर क्लिक करने का प्रयास करता हूं तो यह हमेशा अंतिम सूचकांक दिखाता है। ऐसा लगता है कि यह केवल अंतिम बहुभुज पर क्लिक किया गया है। मुझे लगता है कि जब मैं एक नया श्रोता जोड़ता हूं तो यह पुराने को ओवरराइड करता है। सही सूचकांक को अलर्ट करने के लिए मैंने प्रत्येक बहुभुज के लिए श्रोता कैसे जोड़ा जा सकता है?

धन्यवाद

+0

[प्रत्येक बहुभुज गूगल मैप्स V3 के लिए खुला है InfoWindow] (के संभावित डुप्लिकेट http://stackoverflow.com/questions/13017915/open-infowindow-for-each-polygon-google-maps- v3) – geocodezip

+0

इस मुद्दे का सार यह है कि वही 'p' सभी 'functi द्वारा साझा किया जाता है ऑन (इवेंट) 'लूप ब्लॉक_ के रूप में अच्छी तरह बंद हो जाता है। इस प्रकार, लूप निष्पादित होने पर 'पी' अंतिम बनाए गए बहुभुज से बंधे होते हैं। वे चर को अलग करने के लिए 'polygonArray.forEach' का उपयोग करेंगे। –

उत्तर

33

यह सामान्य व्यवहार है।

1) मुझे यकीन है कि तुम वापस संदर्भ से बहुभुज (मैं इसे परीक्षण नहीं किया है) प्राप्त कर सकते हैं कर रहा हूँ:

google.maps.event.addListener(polygon, 'click', function (event) { 
    alert(this.indexID); 
}); 

2) आप यह भी कर सकते थे वहाँ दो समाधान है कि मैं के बारे में सोच सकता है का उपयोग कुछ closures:

var addListenersOnPolygon = function(polygon) { 
    google.maps.event.addListener(polygon, 'click', function (event) { 
    alert(polygon.indexID); 
    }); 
} 

map = new google.maps.Map(document.getElementById('map_canvas'), 
    mapOptions); 
//Loop on the polygonArray 
for (var i = 0; i < polygonArray.length; i++) { 
    //Add the polygon 
    var p = new google.maps.Polygon({ 
     paths: polygonArray[i], 
     strokeWeight: 0, 
     fillColor: '#FF0000', 
     fillOpacity: 0.6, 
     indexID: i 
    }); 
    p.setMap(map); 
    addListenersOnPolygon(p); 
} 
संबंधित मुद्दे