如何使用jQuery推迟设置事件监听器,直到ajax调用和渲染完成之后?

时间:2013-10-24 15:57:21

标签: javascript jquery ajax

我熟悉Underscore的_.defer功能。如何使用jQuery重新创建它?

我正在执行ajax调用,将该调用的响应中的divs附加到DOM中,但问题是,我需要在新创建的divs上设置set事件侦听器,但是我必须等到它们被渲染。我怎么能这样做?

$.getJSON( mAPI, function( m ) {
   $(m.items).each(function(item) {
       $('#items-container').append('<div class="item">' + item + '</div>');
   });
}):

$( ".item" ).click(function(e) {
    alert( "Handler for .click() called." );
});

2 个答案:

答案 0 :(得分:2)

您最好的选择可能是使用on将事件委托给容器:

$('#items-container').on('click', '.item', function (e) {
    alert('Handler for .click() called');
});

注意:您只需要在每次AJAX请求之后附加一次此事件处理程序。 (谢谢@Kevin B

答案 1 :(得分:1)

使用.on()

由于元素是动态添加的,因此无法将事件直接绑定到它们。因此,您必须使用Event Delegation

$("#items-container").on("click", ".item", function (e) {
    alert("Handler for .click() called");
});

语法

$( elements ).on( events, selector, data, handler )