2013-04-30 44 views
0

我想在img#play的函數內訪問以下變量linky。然而,它只接受了最後一個已知的linky值,而且我明白這是由於Javascript關閉引起的。谷歌搜索和嘗試許多不同的東西,如在img#播放點擊功能返回鏈接似乎沒有工作。我也被告知變量song將遭受同樣的問題。任何人有任何想法如何使每個單獨的鏈接,而不僅僅是最後的img#播放工作的點擊功能?函數之外的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 2013-04-30 21:04:43

+0

循環範圍界定問題的共同點。你的$ .get()中的'song'將引用最後一個創建的,如果它甚至到達$ .get(),因爲你在那之前返回一個值。非常奇怪的代碼結構... – 2013-04-30 21:11:11

+0

你期望用什麼「return this.linky;」 ? – 2013-04-30 21:15:32

回答

0

您可以創建另一封:

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

這將保留linky在創建關閉時的值。

+0

Hrmm。我試過這個:https://gist.github.com/jennojenno/5492540並在第2和第10行添加了你的代碼。但是,我仍然只獲得最後一首歌,而不是每首。我在這裏做錯了什麼? – jenno 2013-04-30 22:46:31

+0

@jenno你換了1號和2號線 – zeroflagL 2013-04-30 22:52:32

+0

啊。我一開始就這樣試過,然後當它不起作用時,我將它換成現在的樣子。都沒有工作...我錯過了什麼? – jenno 2013-04-30 23:14:25