2013-04-17 88 views
1

我无法将jQuery事件绑定到动态创建的列表项。动态创建的内容不绑定jQuery事件

这是btnRemoveItem上的事件,在jQuery开始添加后没有触发。

$('#btnAddStore').on('click', function(){ 
    (...) 
    $.ajax({ 
    success: (function(result) { 
     (...) 
     var li = jQuery('<li/>', { 
      'id': object['id'] 
     }).append('<span title="Remove item from list" class="btnRemoveItem"></span>') 
      .append('<span class="text">' + name_adr[0] + '</span>') 
      .append('<span class="address">' + name_adr[1] + '</span>'); 

     $(li).appendTo('#'+ country + ' ul'); 
    } 
    }); 
}); 

我已经看过类似的问题在这里,但我还没有找到任何解决我的问题的答案。我从这段代码中遗漏了什么?

+0

的可能重复的[通过动态地生成的元素触发的事件不被事件处理程序捕获](http://stackoverflow.com/questions/12829963/events-triggered-by-dynamically-generated-element-没有被事件手捕获) –

回答

9

使用.on()这样

$(document).on('click','#btnAddStore', function(){...}); 
+0

感谢您的提示。它不能在'Add Store'函数中使用这个函数,但在'Remove store'函数中执行相同的操作可以解决我的问题。这是否意味着当使用'.on()'事件时,我总是应该使用这个方法? – Steven

+1

如果你的元素是动态添加的,你应该使用'.on()'这种方式。 –

1

使用代表团。对():

$(document).on('click', '#btnAddStore', function(){...}); 
2

试试这个

$(document).on('click','#btnAddStore', function(){...}); 

$('#btnAddStore').on("scroll", ....)结合的滚动事件仅是这些元素在执行本声明时出现,即是否有任何带有分类的新元素在执行这个语句之后,动态添加的包装器1将不会为这些元素执行事件处理程序。

$(document).on("scroll","#btnAddStore", ...)另一方面将向文档对象注册一个事件处理程序,并且每当滚动发生在具有类'wrapper`的元素内时,都将利用事件冒泡来调用处理程序,因此它将支持动态添加元素。

See here