2014-01-17 52 views
-1

第一次單擊事件發送一個API調用,返回多個搜索結果。如何選擇由其他事件創建的DOM元素?

當點擊'upvote'時,應該發生第二次點擊事件,這是每個返回的搜索結果中的一個選項。

問題是,看起來我無法在搜索結果中選擇upvote按鈕,因爲它們是在第一次單擊事件之後創建的(通過克隆另一個元素)。

任何人都可以解釋爲什麼會發生這種情況?第一次點擊事件的

部分:

success: function(json) { 
    var reviews = json.reviews; 

    $.each(reviews, function(i) { 
    var critic = reviews[i].critic; 
    var quote = reviews[i].quote; 
    var score = reviews[i].original_score; 

    $('#tile-demo').clone().removeAttr('id').removeClass('hidden') 
    .find('.critic-name').text(critic).end() 
    .find('.critic-score').text(score).end() 
    .find('.critic-quote').text(quote).end() 
    .appendTo('.review-grid'); 
    }); //end each loop 

} //end success call 

新的呼叫,應選擇#瓦演示的克隆:

$('.search-results').click(function(){ 
    var goodCritic = $(this).siblings('.critic-name').text(); 
    console.log(goodCritic); 
}); 
+2

查看jQuery中['.on()'](http://api.jquery.com/on/)綁定方法。 –

+0

好的,會做的。謝謝。 –

+1

你可以使用.on() –

回答

1

上使用方法如下:

$('#containerId').on('click','upvotebuttons',function(){write your code here}); 

其中containerId是您渲染新數據的容器div的id,並將[upvotebuttons]替換爲[類名稱]的upvote按鈕。

+0

代表團,你可以簡要解釋當我這樣做時究竟發生了什麼?我一直在閱讀規範,並不斷迷路。 –

+0

我發現了很好的解釋在stackoverflow - http://stackoverflow.com/a/8752376/1873002 –

+0

這真棒。謝謝。 –

0

我剛剛遇到了Jeffrey Way的a quick screencast,這表明了一個稍微不同的解決方案。其他答案正常工作 - 這只是另一種解決方法(仍然使用事件委託)。

$('#parent-of-target').click(function(e) { 

    if ($(e.target).is('#target-element')) { 
     alert('clicked'); 
    } 
});