2009-08-02 18 views
6

मैं एक ऐसे पृष्ठ पर काम कर रहा हूं जो जावास्क्रिप्ट httpObject के साथ कोड लाता है और पृष्ठ पर दो तत्वों को अपडेट करने के लिए इसका उपयोग करता है - एक Google मानचित्र, और एक डीआईवी जो मार्कर पॉइंट्स को सूचीबद्ध करता है ।Google मानचित्र मार्करों को गतिशील रूप से श्रोताओं को जोड़ना

वह बिट ठीक काम करता है। समस्या यह है कि जब मैं मार्कर बनाते हैं, तो मैं लूप के माध्यम से ऐसा करता हूं, और मैं श्रोताओं को प्रत्येक लूप में मार्कर में जोड़ता हूं। फिर, जब मैं पृष्ठ का परीक्षण करता हूं, तो मुझे लगता है कि प्रत्येक मार्कर के लिए भी यही बात होती है।

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

मुझे लगता है कि यह जावास्क्रिप्ट में एक नया बनाते समय भी Google मानचित्र API के साथ मार्कर की पहचान को बनाए रखना है। क्या मैं समझ नहीं कैसे उसके चारों ओर पाने के लिए - मैं पाश के बाहर एक सरणी बनाने, और newMarker साथ

var newMarker = new GMarker(newLatLng); 

बदलते [गिनती] = नए GMarker (newLatLng) की कोशिश की,

लेकिन यह अभी भी काम नहीं करता है।

मेरी सहायता करें, स्टैक ओवरव्लो। तुम मेरे ही उम्मीद कर रहे हैं। :)

संपादित करें: एक छोटे से अधिक कोड

for (count=0;count<=LatArray.length;count++) 
{ 
    thisLat = LatArray[count]; 
    thisLong = LongArray[count]; 
    thisHTML = HTMLArray[count]; 
    newLatLng = new GLatLng(thisLat, thisLong, true); 

    if (mapBounds.containsLatLng(newLatLng)) 
    { 
     //alert(count); 
     var dinnerNumber = "dinner_"+count; 
     newMarkers[count] = new GMarker(newLatLng); 
     map.addOverlay(newMarkers[count]); 
     GEvent.addListener(newMarkers[count],'mouseover',function(){document.getElementById(dinnerNumber).style.borderColor = '#000000'; 
    }); 
}// for 
+1

+1 एक) – karim79

+0

क्या हमारे पास एक बड़ा कोड नमूना है? यह कहना मुश्किल है कि समस्या क्या है। – karim79

उत्तर

6

बंद मुद्दा - उन सभी श्रोताओं ही dinnerNumber चर को साझा करें। इसे आज़माएं:

GEvent.addListener(newMarkers[count], 'mouseover', (function(dinnerNumber){ return function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';}; })(dinnerNumber)); 

इस तरह, प्रत्येक श्रोता रात्रिभोज की अपनी बंद प्रति के साथ बनाया जाता है।

+0

धन्यवाद जस्टिन! मेरे पास कोई अंत नहीं है कि अंत में क्या चल रहा है, लेकिन यह काम करता है। मैं इसे अलग कर दूंगा और देख सकता हूं कि मैं इसका एहसास कर सकता हूं, लेकिन अभी के लिए आपने मेरी समस्या हल कर ली है! –

+1

बंद करने और "कुख्यात पाश समस्या" के वास्तव में अच्छी व्याख्या के लिए http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/ देखें। –

1

आप ध्यान से

GEvent.addListener(newMarkers[count], 'mouseover', 
     (function(dinnerNumber) 
      { return function() 
       { document.getElementById(dinnerNumber).style.borderColor = '#000000';};   
      } 
    )(dinnerNumber) 
); 

आप एक याद किया() को पढ़ने के लिए;

3-वां पैरामीटर है (समारोह (वर) {वापसी function() {// क्या आप wirh वर चाहते हैं;};}) स्टार वार्स (गैर बकवास संदर्भित करने के लिए (वर)

संबंधित मुद्दे

 संबंधित मुद्दे