2017-10-19 3 views
0

문제가있는 것 같습니다. infobox를 많이 구현했지만 캔버스에 다른 코드를 삽입하는 방법을 알아 냈습니다. 나는 그것을 알아낼 수 없을 정도로 나는 자바 스크립트로 아주 미경험이다. i는지도에 가면Google지도 apiv3, 모든 마커의 클릭 기능은 동일합니다.

는 모든 마커를 표시하지만, 단지 어레이의 마지막 코드 조각

코드 선택 : contentstring

function updateMap() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 4, 
    center: locationarray[0] 
    }); 
    var markernumber = new Array(); 
    for (var i = 0; i < 99; i++) { 
    markernumber[i] = new google.maps.Marker({ 
     position: locationarray[i], 
     map: map 
    }); 
    console.log('in loop:' + i); 
    google.maps.event.addListener(markernumber[i], 'click', function() { 
     console.log('in click:' + i); 
     openInNewTab(contentString[i]); 
    }); 
    } 
    document.getElementById('loader').style = "opacity: 0;"; 
} 

을 [I] 잘 작동 그래서이 함수 밖의 것은 아무것도 아닙니다. 그런

+1

'구글지도 apiv3 모든 마커에 동일한 클릭 function'주는 몇 가지 질문이 있으면 말해 - 아니, 당신이 그렇게됩니다 ...'i' 이벤트 핸들러는 모든 100있을 것입니다 내부 마커를 클릭하십시오. 클로즈를 생각하십시오 –

+1

[Google Maps JS API v3 - 간단한 여러 마커 예] (https://stackoverflow.com/questions/3059044/google-maps-js-api-v3-simple-multiple-marker-example)의 중복 가능 – geocodezip

답변

-1

시도 뭔가 : 당신은 폐쇄의 오류를 가지고있다

var markernumber = new Array(); 
    for (var i = 0; i < 4; i++) { 
     markernumber[i] = new google.maps.Marker({ 
      position: position[i], 
      map: map 
     }); 
     console.log('in loop:' + i); 
     (function (i, content, marker) { 

      google.maps.event.addListener(marker, 'click', function (e) { 
       console.log('in click:' + i); 
       //console.log(e); 
      }); 

     })(i, contentString[i], markernumber[i]); 
    } 

. 청취자가 실행될 때 i 값이 이미 변경되어 (for) 99로 전달됨을 의미합니다.

순서대로 설명합니다. i 또는 원하는 변수를 호출하면 시스템은이 이름으로 마지막 값을 찾습니다. 따라서 값이 변경되면 결과는 변수의 마지막 "업데이트"가됩니다. 당신이 당신의 리스너에 i의 값을 읽고 싶다면 그렇게 마지막 값이 99

될 것 for에 당신이 이제까지 가지고 i "갱신"i을 읽으려고 여기

, 당신은에 있습니다 IIFE를 만들고 매개 변수에 i, contentStringmarkernumber 실제 값을 전달하십시오.

폐쇄에 대한 자세한 내용은 here을 참조하십시오 (설명서에는 약간의 설명이 있지만 그 안에 문구가 있어야하며 가장 좋아해서 찾을 수 있습니다).

당신이

+0

실례지만 선례 게시물에는 오류가 있지만 이제는 정상적으로 처리됩니다. –