2014-01-17 53 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'); 
    } 
});