运行jquery .each()后无法显示div

时间:2011-12-14 16:38:56

标签: jquery

我正在尝试使用自定义复选框选择所有脚本,并且发生的事情是结果编号将更新,但它会显示计数,因为每个复选框都会提交表单以获取准确的结果编号。但是当选择all将启动click事件时,它会显示正在进行的数字,我希望它只在.each事件完成后显示。使用当前代码,它将不再运行第二个函数来再次显示div这里是我的代码,任何帮助都会很棒:

$('.select_all').live('click',function(){
    $('#psf_search_results_number').hide();
    $('.psf_grp_content input[name="type[]"]').each(function(){
        $(this).click();
    });
    return false;
},function(){
    $('#psf_search_results_number').show();
});

3 个答案:

答案 0 :(得分:2)

首先,.live()已弃用,您应该使用.delegate()(jQuery 1.7之前版本)或.on()(适用于jQuery 1.7 +)。

其次,.live()不带两个函数参数,所以难怪第二个函数从不被调用。

如果您只想在.each()循环完成后调用第二个函数,则可以使用.on()这样做:

$(document.body).on('click','.select_all', function(){
    $('#psf_search_results_number').hide();
    $('.psf_grp_content input[name="type[]"]').each(function(){
        $(this).click();
    });
    $('#psf_search_results_number').show();
    return false;
});

如果我们能够看到您的HTML,那么所有.select_all元素共有的父对象将比使用document.body更好,但它会在我显示它时起作用。

答案 1 :(得分:1)

我认为你应该这样做(但是我在想,因为我不清楚你的问题是什么):

$('.select_all').live('click',function(){
    $('#psf_search_results_number').hide();
    $('.psf_grp_content input[name="type[]"]').each(function(){
        $(this).click();
    });
    $('#psf_search_results_number').show();
    return false;
});

如果你想在live()之后执行show(),只能将each()传递给{{1}}

答案 2 :(得分:1)

.live( events, data, handler )

事件包含JavaScript事件类型的字符串,例如“click”或“keydown”。从jQuery 1.4开始,字符串可以包含多个空格分隔的事件类型或自定义事件名称。

数据将传递给事件处理程序的数据映射。

handler 触发事件时执行的函数。

.live()不带两个函数参数