2014-01-13 34 views
1

我有一個問題,我的Json Javascript中。 因此,我運行json,並獲取所有youtube標識的列表,現在我顯示所有這些youtube視頻,並在其旁邊放置一個按鈕。現在,如果我點擊該按鈕,它必須給我一個該視頻的YouTube視頻ID的控制檯日誌,但它總是給我最後一個YouTube視頻ID。任何一個人都可以幫助我解決導致我陷入困境的代碼。總是得到的每個最後一個ID以JSON

這裏是我的代碼:

function generateLast5() 
     { 
     $("#musicList").html(""); 
     console.log("what uuup"); 
      $.ajax({ 
      url: ".............",  
      dataType: "jsonp", 
      success: function(json){ 
       console.log(json.played_tracks); 

       for(i in json.played_tracks) 
       { 
        console.log(i); 
        oSingle = json.played_tracks[i]; 
        console.log(oSingle.youtube_ids.default); 

        phli = $("<li/>") 
         .appendTo("#musicList"); 

        $("<iframe/>") 
         .attr("src", "http://www.youtube.com/embed/" + oSingle.youtube_ids.default) 
         .appendTo(phli); 

        $("<button/>") 
        .attr("id","btnAddToPlaylist") 
        .text("Add To Playlist") 
         .click(function() { 
         console.log(oSingle.youtube_ids.default); 
         }) 
        .appendTo(phli); 

       }  
      } 

      }); 
} 
+0

我的ID作爲一個屬性上(在那裏你會發現它更適合或其他地方),然後在您的控制檯聲明說其存儲到該按鈕。 1)存儲它。 .data('track-id',oSingle.youtube_ids.default)2)閱讀它。的console.log($(本)。數據( '跟蹤ID'))。 – Streamside

+0

強制性的,如果有些多餘的「不要使用..在到達迭代陣列」在這裏。 – Alex

+0

您可能會發現閱讀Javascript中的範圍很有趣,這裏有一個開始; http://stackoverflow.com/questions/500431/javascript-variable-scope – hank

回答

0

你應該起來

function generateLast5() { 
    $("#musicList").html(""); 
    console.log("what uuup"); 
    $.ajax({ 
     url: ".............", 
     dataType: "jsonp", 
     success: function (json) { 
      load(json); // call load function here 
     } 
    }); 
} 

環與環合適的陣列,並設置標識作爲數據屬性拆分您的代碼可讀性更好

AJAX功能

function load(json) { 
    console.log(json.played_tracks); 
    for (var i = 0; i < json.played_tracks.length; i++) { // use array loop 
     console.log(i); 
     oSingle = json.played_tracks[i]; 
     console.log(oSingle.youtube_ids.default); 

     phli = $("<li/>") 
      .appendTo("#musicList"); 

     $("<iframe/>") 
      .attr("src", "http://www.youtube.com/embed/" + oSingle.youtube_ids.default) 
      .appendTo(phli); 

     $("<button/>") 
      .data("id", oSingle.youtube_ids.default) // set id as data attribute 
      .addClass('btn') // set class here for delegation reasons instead of id, Id should be unique 
      .text("Add To Playlist") 
      .appendTo(phli); 
    } 
} 

單獨的點擊事件

$('button').on('click', '.btn', function(){ 
    console.log($(this).data('id')); 
}); 
1

您的代碼有許多問題。

首先,您要創建具有相同ID的多個按鈕。 ID應該是唯一的(在你的情況下,他們不需要)。

其次,不建議使用for ... in循環通過數組進行迭代。相反,使用for循環和數組長度。

第三,你對全局變量分配值。我會推薦本地變量(例如var oSingle)以避免衝突。

我們您的問題:你總是最後一個ID,因爲這是你與oSingle.youtube_ids.default(參見上述局部變量評論)調用什麼。相反,你可以在ID附加到每個按鈕:

$("<button/>") 
    .data("youtubeId",oSingle.youtube_ids.default) 
    .text("Add To Playlist") 
    .click(function() { 
    console.log($(this).data(youtubeId)); 
    })