0

linkyの関数内で以下の変数にアクセスしたいimg#play。ただし、linky の最後の既知の値のみを使用しており、これは Javascript クロージャーと呼ばれるものによるものだと理解しています。img#play クリック関数内でリンクを返すなど、さまざまなことをグーグルで試してみてもうまくいかないようです。また、変数にもsong同じ問題が発生すると言われました。img#play のクリック機能を、最後のものだけでなく、個別のリンクごとに機能させる方法について、誰かアイデアがありましたか?

  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);

          });
          });
        }


      }
    });
  };

上記のコードにすべての変数が必要です...何をすべきかについての手がかりがあれば、それは大歓迎です。

4

1 に答える 1

0

別のクロージャーを作成できます。

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

これにより、クロージャーが作成された時点での linky の値が保持されます。

于 2013-04-30T21:14:24.493 に答える