2016-11-20 89 views
0

我有一個特別的問題,我似乎不包裹我的頭。我正在使用reddit api來獲取數據。jQuery附加循環內

修訂

$(function() { 

    console.log("is it loading") 

    axios.get('http://www.reddit.com/r/DrunkOrAKid/hot.json?sort=hot') 
    .then(function(data){ 
    var q; 
    for(var i = 2; i < data.data.data.children.length; i++){ 
     q = data.data.data.children[i]; 
     $('#main').append('<h4>' + q.data.title + '</h4><br><button class="btn btn-success trigger">answer</button><div class="answer">'+ q.data.selftext +'</div>') 


     $('.answer').hide() 


     $('.trigger').click(function(e){ 
     e.preventDefault() 
     console.log("clicked", [i]); 
     $('.answer').show() 
     }) 
    } 
    }).catch(function(error){ 
    console.log("error occured") 
    }) 
}) 

所以基本上我想用#trigger顯示答案。但問題在於,當我點擊#trigger按鈕時,數組顯示了27個計數而不是實際的計數,它是26.當點擊#trigger按鈕時,它不知何故地添加了一個計數。現在我無法點擊按鈕來顯示答案。任何幫助將不勝感激

+2

爲什麼要用'[variable]'將字符串附加到字符串?這是創建一個不必要的數組。你也應該考慮對這些字段使用類,而不是使用枚舉的id。然後你可以選擇這個類並獲得它們的'eq(index)'來處理。 – Taplar

+0

我已經更改爲類,它似乎不工作。我不確定你在第一個問題中的含義。我將[i]添加到我的ID中,因爲我希望每個按鈕和答案都有不同的ID。目前在我的數組中有26個索引,所以有26個按鈕和答案。當我點擊例如第三個索引按鈕時,它應該只顯示第三個答案。 – Irsyad14

+0

[]外的字符串是一個數組。通常,您不會將數組連接到字符串。你是否試圖讓id遵循'name [#]'的模式?在任何情況下,你都不需要這樣的課程。你能用新的邏輯更新你的問題嗎?哪些工作不正常? – Taplar

回答

0

試試看看。這不是在查找。它使用/綁定元素,因爲它使它們。更好的方法可能是使用具有上下文查找的委託偵聽器。

axios.get('http://www.reddit.com/r/DrunkOrAKid/hot.json?sort=hot') 
     .then(function(data) { 
      var $main = $('#main'); 

      //use slice so you can use forEach instead of rolling your own for loop 
      data.data.data.children.slice(2).forEach(function(child){ 
       //instead of looking up trigger, create it so you can do whatever you want with it 
       var $trigger = $('<button class="btn btn-success">answer</button>'); 
       //same with answer 
       var $answer = $('<div class="answer">'+ child.data.selftext +'</div>'); 

       $answer.hide(); 

       $trigger.on('click', function(e){ 
        e.preventDefault(); 
        $answer.show(); 
       }); 

       $main 
        .append('<h4>'+ child.data.title +'</h4><br>') 
        .append($trigger) 
        .append($answer); 
      }); 
     }).catch(function(error) { 
      console.log("error occured") 
     }); 
    }); 
+0

是的,它的工作。謝謝。你能澄清爲什麼我需要使用forEach而不是for循環?兩者之間有什麼區別?另一個是將append放在最後而不是我的方法的基本原理是什麼?什麼是查找?我試圖真正理解邏輯,而不是複製粘貼。 – Irsyad14

+0

forEach有點清潔,因爲你不必跟蹤索引等等,它們都遵循相同的邏輯,但是forEach做了很多的插件。不此事。雖然你可能想在append之前執行hide(),因爲append將會執行瀏覽器重繪,所以會隱藏/顯示。如果在連接到頁面之前隱藏,則不會重繪。所以1重畫vs 2. $(選擇器)是一個查找,只要選擇器是一個字符串而不是函數/對象。 – Taplar

+0

現在一切都很清楚。謝謝您的幫助。 – Irsyad14