按类访问动态生成的元素时出现意外的JQuery行为

时间:2010-12-26 19:24:13

标签: jquery

我有以下动态生成一些复选框的JQuery代码:

var container = $('#checkbox_list_container');
var html = '<input type="checkbox" class="selection_checkboxes" name="ids[]" value="1" />';
container.append($(html));

我还有以下代码,当点击任何这些复选框时会弹出警报:

$(document).ready(function() {
 $('.selection_checkboxes').click(function() {

   alert('click detected');

   if ($(this).attr('checked'))
   {
     if ($('.selection_checkboxes:checked').size() > 3)
     {
       alert('You can only select up to 3 items');     
       return false;
     }
   }
 });
});

出于某种原因,JQuery无法检测何时单击任何动态生成的复选框并显示警报(“单击检测到”)消息,更不用说获取具有相同类名的所有已选中复选框的计数

知道我做错了吗?

1 个答案:

答案 0 :(得分:3)

您需要使用jQuery的live将处理程序附加到动态创建的元素:

$('.selection_checkboxes').live('click', function() {
    //stuff
});

如果您的所有复选框都在#checkbox_list_container中,则delegate效率更高:

$('#checkbox_list_container').delegate('.selection_checkboxes', 'click', function() {
    //stuff
});