我目前正在尝试进入jQuery。而且我很难过( - ;
现在我正在尝试通过.load()
加载页面scan_music : function ()
{
var target = $('#crawl_results');
target.load('/admin/scanner/crawl_product_ids/de/music #product_ids', function()
{
admin.hide_loading();
});
return false;
}
这工作得非常好,一切都正确显示。我正在加载的页面中有很多复选框,我希望能够通过一个特殊复选框(#check_all检查.to_be_checked)来切换它们。
嗯,这个功能很好用。但它对于加载ajax的内容不起作用。
check_all_boxes : function ()
{
var check_all = $('#check_all'),
to_be_checked = $('.to_be_checked');
check_all.live('click', function ()
{
to_be_checked.attr('checked', check_all.is(':checked'));
});
}
我知道我必须使用.live()来选择加载的内容(使用check_all.live()正常工作)。问题是类.to_be_checked不受影响,我不知道在这种情况下如何使用live()函数来选择它们。
我希望你们能帮助我(
祝你好运!
答案 0 :(得分:4)
您需要在live
处理程序中再次运行DOM查询:
check_all.live('click', function ()
{
$('.to_be_checked').attr('checked', check_all.is(':checked'));
});
这是因为在分配to_be_checked
时,它包含分配时DOM查询的结果,这不是所期望的行为。
如果在处理程序内再次运行查询,您将获得所需的结果。
答案 1 :(得分:0)
您的问题存在标准的闭包问题,to_be_checked是在live函数之外定义的,因此在live()事件最初绑定时设置,并且稍后不会更新。在live()调用中再次使用选择器。
check_all_boxes : function ()
{
var check_all = $('#check_all');
check_all.live('click', function ()
{
$('.to_be_checked').attr('checked', check_all.is(':checked'));
});
}
答案 2 :(得分:0)
check_all_boxes : function ()
{
var check_all = $('#check_all'),
to_be_checked = $('.to_be_checked');
check_all.live('click', function ()
{
to_be_checked.attr('checked', check_all.is(':checked'));
});
}
在此代码中,您将缓存选择器“.to_be_checked”。对于选择器来说这通常是一个好主意,但在通过AJAX加载内容时则不行。这里发生的是当定义“to_be_checked”时,它会在DOM中搜索具有该类,创建和对象的所有元素,就是这样。
你想要做的就是:
check_all.live('click', function () {
$('.to_be_checked').attr('checked', check_all.is(':checked'));
});
}