2013-04-30 3 views
0

의 함수 내에서 아래 변수 linky에 액세스하려고합니다. 그러나, 그것은 linky의 마지막 알려진 값을 취하는 것 뿐이며, 이것이 Javascript 클로저라고하는 뭔가 때문인 것으로 알고 있습니다. 검색 기능을 사용하여 img # play click 기능으로 돌아 가기 링크 검색과 같은 여러 가지 시도를 검색하고 시도해보십시오. 나는 또한 변수 song 같은 문제가 고통을 것입니다 말했다. 누구나 img # play를위한 클릭 기능을 만드는 방법에 대한 아이디어는 단지 마지막 링크가 아닌 각각의 개별 linky에 맞습니까? 누군가가이 많이 주시면 감사하겠습니다 무엇을해야하는지에 대한 단서가있는 경우Javascript 함수 외부에서 클로저 변수 액세스

function doSearch() { 

    var searchTerm = document.getElementById('search').value; 

    // Search soundcloud for artists 
    SC.get('/tracks', { q: searchTerm}, function(tracks) { 
     for(track in tracks) { 

     console.log(tracks[track]); 

     var img = document.createElement('img'); 
     img.setAttribute("src", (tracks[track]["artwork_url"])); 
     var title = tracks[track].title.replace("'", "\\\'").replace("\"", "\\\""); 

     var song = document.createElement('div'); 

     var linky = document.createElement('a'); 
     linky.setAttribute("href", (tracks[track].permalink_url)); 

     img.setAttribute("onclick", "showTrackInfo('" + title + "\\n" + "\\n" + tracks[track].label_name + "\\n\\n" + "(click to close)" + "')"); 



     if (tracks[track]["artwork_url"] == null) { 
      console.log(""); } 
     else { 

      var Catalog = document.getElementById('catalog'); 
      Catalog.appendChild(img); 

      $('div#catalog').append('<img src="http://i.imgur.com/rGdvfl7.png" id="play">'); 


      $('img#play').click(function() { 

      return this.linky; 


      $.get(
      'http://soundcloud.com/oembed?' + 
      'url=' + linky + 
      '&format=json&maxheight=296' 
      ) 

      .done(function (response) { 
      song.innerHTML = response.html; 
      document.getElementById("soundiframe").appendChild(song); 

      }); 
      }); 
     } 


     } 
    }); 
    }; 

나는 ... 위의 코드에서 모든 변수가 필요합니다. 당신은 다른 폐쇄를 만들 수 있습니다

+0

문제는 비동기 동작과 관련이 있습니다. – adeneo

+0

for 루프 범위 지정 문제. $ .get() 내부의'song '은 이전에 값을 반환 했으므로 $ .get()에 도달 한 경우 마지막으로 생성 된 것을 참조합니다. 매우 이상한 코드 구조 ... –

+0

"return this.linky;"를 사용하여 무엇을 기대합니까? ? –

답변

0

:

(function(linky, song) { 
    $('img#play').click(function() { 
    ... 
}(linky, song)); 

이 폐쇄가 생성 될 때 linky의 가치를 보존하는 것입니다.

+0

Hrmm. 나는 이것을 시도했다 : https://gist.github.com/jennojenno/5492540 2 번째 줄과 10 번째 줄에 코드를 추가했다. 그러나, 나는 아직도 마지막 노래 만 얻는다. 내가 여기서 뭔가 잘못하고있는거야? – jenno

+0

@jenno 1 호선과 2 호선을 바꿨습니다 – zeroflagL

+0

아. 처음에는 그런 식으로 해봤지만, 효과가 없을 때는 바꿨습니다. 어느 쪽도 일하지 않았다 ... 나는 무엇인가 놓치고 있냐? – jenno

관련 문제