树中的递归错误太多

时间:2016-04-07 11:34:51

标签: javascript jquery

Hello stackoverflow社区。我需要帮助"过多的递归"错误。当我执行这些功能时,很奇怪,但一切正常,只是错误。:

function check_checker (siblings, status) {
    if (siblings) {
        if (status == true) {
            $(siblings).children('li.imCheckbox').children('input').prop( "checked", true );
            if ($(siblings).children('ul')) {
                check_checker($(siblings).children('ul'), true);
            }                                           
        } else {
            $(siblings).children('li.imCheckbox').children('input').prop( "checked", false );
            if ($(siblings).children('ul')) {
                check_checker($(siblings).children('ul'), false);
            }                                           
        }
    }
}
$(document).ready(function(){
    $('body').on('click', 'input[name=impTaskCh]', function(){
        if ($(this).is(':checked')) {
            var siblingas = $(this).parent().siblings('ul');
            check_checker(siblingas, true);
        } else {
            var siblingas = $(this).parent().siblings('ul');
            check_checker(siblingas, false);
        }
    });
});

点击支票时,如果ul有ul,则会检查所有复选框' es。 Maby check_checker永远不会结束或什么?你们的想法是什么?

1 个答案:

答案 0 :(得分:1)

是的,这永无止境。 $(siblings).children('ul')将返回一个对象,这是真实的,所以它将永远是真的。我建议使用length属性。

function check_checker (siblings, status) {
    if (siblings) {
        if (status == true) {
            $(siblings).children('li.imCheckbox').children('input').prop( "checked", true );
            if ($(siblings).children('ul').length > 0) {
                check_checker($(siblings).children('ul'), true);
            }                                           
        } else {
            $(siblings).children('li.imCheckbox').children('input').prop( "checked", false );
            if ($(siblings).children('ul').length > 0) {
                check_checker($(siblings).children('ul'), false);
            }                                           
        }
    }
}