2012-01-10 4 views
0

I 좌표를 수신하고, 가장 가까운 튜브 역 반환 다음 JavaScript 함수가 :이 함수의 실행의 결과로서 출력하기 위해 필요한 값의 값document.write를

function coord() { 

       var metro = new YMaps.Metro.Closest(new YMaps.GeoPoint(<?=getCoords($addr) ?>), { results : 1 }) 

       YMaps.Events.observe(metro, metro.Events.Load, function (metro) { 
        if (metro.length()) { 
         metro.setStyle("default#greenSmallPoint"); 
         var firstStation = metro.get(0); 
         var tubest = (firstStation.text).split("метро "); 
          var tube = tubest[1]; 
         if($("span#tubest").text() == '') { 
          $('.whiteover').hide(); 
         } 
        } else { 
         if($("span#tubest").text() == '') { 
          $('.whiteover').hide(); 
         } 
        } 
       }); 
} 

이다 "tube"변수 (var tube = tubest [1];). 기본적으로 간단한 document.write가 작동합니다. 또는 간단한 반환 값은 다음과 같습니다.

var tubestation = coord(); 

그러나이를 달성하는 방법은 확실하지 않습니다.

+0

이 왜 제목에 "자바 스크립트"를 작성 했습니까? 설명해 주시겠습니까? –

+0

나는 당신의 용서를 구걸하지만, 내가 쓴 것, 즉 jQuery 나 JavaScript가 중요합니까? jQuery는 JavaScript 프레임 워크이며 모든 jQuery 코드는 실제로 JavaScript입니다. 내 질문에 대답 해줘서 고마워, 마틴. – cycero

+0

많은 사용자가 제목에 태그를 쓰고 있기 때문에 걱정하지 않아도됩니다. 이는 잘못된 것입니다. 그게 여기에 태그가 무엇입니까 :) –

답변

0

코드에 비동기 로직을 ​​설정하는 옵저버 패턴을 사용하기 때문에이 함수가 값을 반환하도록 할 수 없습니다. 단순히 coord() 함수가 반환 할 때 그 값은 아직 없습니다.

일반적으로 콜백 함수를 전달한 다음 계산을 다시 시작합니다. 당신의 if { ... } else { ... } 그렇게 콜백이 호출되는 후

callback.call(null, tube); 

그것을 수행 원하는 값을 알고 후, 값으로 콜백을 호출

function coord(callback) 

다음 :

같은 함수를 선언 성공시 또는 실패시 모두 (undefined을 실패로 통과하는 경우 if 앞에 var tube = null을 지정하여 수정해야 할 수 있습니다). 대신

다음

는이 같은

tubestation = coord(); 

전화를 :

coord(function(tubestation) { 
    // continuation of your code here 
}); 

당신은 아마 오래 지난 것 사용 시간 이후 document.write을 사용할 수 있지만하지 않을 것이다 값을 이미 생성 한 요소의 내용으로 설정할 수 있습니다. 당신은 당신의 태그에 jQuery를, 그래서 그것은 아주 쉽게 :

coord(function(tubestation) { 
    $('#tube_station').text(tubestation); 
}); 

당신이 당신의 HTML 어딘가에 <div id="tube_station"/>이 가정.

+0

답장을 보내 주셔서 감사합니다, 어떤 힌트 내가이 사건에서 콜백을 통과해야합니까? – cycero

+0

예제를 추가했습니다. – Amadan

+0

도움을 주셔서 감사합니다! – cycero

0

이 간단한 기능을 추가하는 것은 어떻습니까?

function coord() { 

      var metro = new YMaps.Metro.Closest(new YMaps.GeoPoint(<?=getCoords($addr) ?>), { results : 1 }) 

      YMaps.Events.observe(metro, metro.Events.Load, function (metro) { 
       if (metro.length()) { 
        metro.setStyle("default#greenSmallPoint"); 
        var firstStation = metro.get(0); 
        var tubest = (firstStation.text).split("метро "); 
         var tube = tubest[1]; 

$ ('DIV 번호의 myDivResult'). html로 (튜브)

     if($("span#tubest").text() == '') { 
         $('.whiteover').hide(); 
        } 
       } else { 
        if($("span#tubest").text() == '') { 
         $('.whiteover').hide(); 
        } 
       } 
      }); 

가}