2016-10-01 2 views
0

GPS 좌표를 한 번 가져오고 그 페이지와 내가 페이지에 표시하는 레스토랑 목록 간의 거리를 계산하는 자바 스크립트를 작성하고 있습니다.최대 통화 스택 초과

$(document).bind("DOMNodeInserted", function(e) { 

    if($('#user-gps').length) { 

     $('.restaurant').each(function(index, value) { 
      var lat = $(value).find('.latitude').attr('data-src'); 
      var long = $(value).find('.longitude').attr('data-src'); 

      var distance = geolocator.calcDistance({ 
       from: { 
        latitude: $('#user-gps').attr('lat'), 
        longitude: $('#user-gps').attr('long') 
       }, 
       to: { 
        latitude: lat, 
        longitude: long 
       }, 
        formula: geolocator.DistanceFormula.HAVERSINE, 
        unitSystem: geolocator.UnitSystem.METRIC 
      }); 

      var string = Math.round(distance * 10)/10 + "km"; 
      var restaurantTitle = '#restaurant-' + index + ' .restaurant-title'; 
      //$(restaurantTitle).append(string); 
      // 
      console.log($(restaurantTitle)); 

      //console.log($(value).find('.restaurant-title').text() + " - " + Math.round(distance, -1) + "km"); 
      $(restaurantTitle).append('<span>' + string + '</span>'); 
     }); 
    } 

}); 

나는 각 레스토랑을 반복하고 거리를 계산하며, 그 후에 3.2km와 같은 값을 표시하도록 문자열을 포맷합니다. 그런 다음 이것을 DOM에 추가하려고합니다.

$(restaurantTitle).append('<span>' + string + '</span>'); 

은 곧 내가 이것을 시도로 나는 최대 호출 스택 콘솔에서 오류를 초과 얻을.

나는 내가 현재 반복하고있는 요소만을 선택하고 있는지 확인하기 위해 몇 가지 방법을 시도했다. 나는 각 식당에 독특한 ID를 부여하기까지했다. 선택기를 완벽하게 잘 작동하지만 추가 또는 어떤 식 으로든 오류를 가져 오지 않고 문자열을 추가 할 수 없습니다.

도움을 주시면 감사하겠습니다.

+1

** 실행 가능한 게시하시기 바랍니다 원하는 것을 할 수있는 다른 이벤트 나 방법을 찾아야 ** [mcve] 스택 조각합니다 ('<>'도구 모음을 사용하여 질문에 단추). 이를 통해 사람들은 문제를보고 해결할 수 있도록 도와 주며, 필요한 모든 콘텐츠가 현장에 있는지 확인합니다. –

답변

5

당신은 document 수준에 DOMNodeInserted 이벤트에이를 구속하고, 한 당신은 당신이 것을하는 DOM 노드를 삽입 차례로 DOMNodeInserted 이벤트를 트리거하는 범위를 삽입하는 이벤트를 트리거하고있는 범위를 삽입 할 때 스택을 가득 채울 때까지 트리거하는 스팬을 삽입합니다.

당신은 당신의 논리를 다시 생각하고, 당신이

+0

그게 문제라는 데 동의하지만 콜 스택 문제를 일으키는 방법에 대해서는 약간 혼란 스럽습니다. 초기 핸들러의'.append()'호출로 인한 이벤트가 새로운 이벤트 루프에서 발생하지 않아야합니까? – Pointy

+1

@Pointy - 필자는 생각하지 않는다. 요소가 삽입 될 때 메시지 큐가 채워진 것처럼 보이며, 다음 등을 실행하기 전에 틱 할 시간이 없다. 그리고 스레드가 하나 채워지기 때문에 그것의 항목을 지우지 않고 스택을 올릴 수 있습니다 * (또는 이와 비슷한) *? – adeneo

+0

이것은 이벤트 핸들러 내에서 이벤트를 트리거 할 때 항상 발생합니다. -> https://jsfiddle.net/yoctn5ue/ 및 https://jsfiddle.net/yoctn5ue/1/ – adeneo

관련 문제